SORU
5 Mayıs 2011, PERŞEMBE


Teşebbüs Sistemi kullanırken boş bir uygulama erişmek için.DirectoryServices

Active Directory için kimliğini doğrulayan bir Üyelik Sağlayıcısı uyguladık ve Sistemi kullanıyor.DirectoryServices. Webdev sunucu ile Visual Studio 2010 tarihinde ASP.NET MVC 3 uygulama bu Üyelik Sağlayıcısı kullanırken bazen (1'i 6 kez) uygulamasında oturum açtığınızda bir istisna olsun.

System.IO.FileNotFoundException: Could not load file or assembly 'System.Web' or one of its dependencies. The system cannot find the file specified.
File name: 'System.Web' 
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.LoadWithPartialNameInternal(AssemblyName an, Evidence securityEvidence, StackCrawlMark& stackMark)
at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADsPathname.Retrieve(Int32 lnFormatType)
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo()
at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName()
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p)
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper()
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

=== Pre-bind state information ===
LOG: DisplayName = System.Web (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: System.Web | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
Calling assembly : HibernatingRhinos.Profiler.Appender, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0774796e73ebf640.

Arama derlemeyi HibernatingRhinos.Profiler.Log4net yapılandırması profiler devre dışı bıraktıktan sonra gerçek durum. o yüzden Appender:

System.AppDomainUnloadedException: Attempted to access an unloaded appdomain. (Except   at System.StubHelpers.StubHelpers.InternalGetCOMHRExceptionObject(Int32 hr, IntPtr pCPCMD, Object pThis)
at System.StubHelpers.StubHelpers.GetCOMHRExceptionObject(Int32 hr, IntPtr pCPCMD, Object pThis)
at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADsPathname.Retrieve(Int32 lnFormatType)
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo()
at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName()
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p)
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper()
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

Bu durum her zaman aynı yöntemi atılan, ama şimdi olduğu gibi rastgele, ama 6 kere yaklaşık 1 çoğaltmak mümkün değildir. Ancak yerleşik Visual Studio 2010 web sunucusu yerine IIs kullanırken istisna yapmıyoruz.

Visual Studio webdev bağlamında birden çok uygulama etki alanları kullanırken muhtemelen bir yarış koşulları ile ilgisi var, ama bu sadece tahmin. Gerçekten bir üretim ortamında bu özel durumlar için istemeyiz olarak sorunun ne olduğunu bilmek istiyoruz.

Ama hiç kimse gerçek bir çözüm buldu 2 benzer vaka bulduk:

http://our.umbraco.org/forum/developers/extending-umbraco/19581-Problem-with-custom-membership-and-role-provider

http://forums.asp.net/t/1556949.aspx/1

18-05-2011 güncelleştirin

Kullanıcı adı, Active Directory loginname bulunduğu durum, yeniden oluşturmak için kod küçük bir miktar (ASP.NET mvc).

using System.DirectoryServices.AccountManagement;
using System.Web.Mvc;

namespace ADBug.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            string userName = "nickvane";
            var principalContext = new PrincipalContext(ContextType.Domain);

            UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
                principalContext,
                IdentityType.SamAccountName,
                userName);

            if (userPrincipal != null)
            {
                PrincipalSearchResult<Principal> list = userPrincipal.GetAuthorizationGroups();
            }

            return View();
        }
    }
}

Ne yazık ki, bu durum hala rastgele, yani tam reproducable hiçbir hata olur.

CEVAP
2 Temmuz 2012, PAZARTESİ


Benim için neyin işe yaradığını burada (.Net 4):

Bunun yerine:

principalContext = new PrincipalContext(ContextType.Domain)

etki alanı dize ile asıl içerik oluşturmak:

E. g.

principalContext = new PrincipalContext(ContextType.Domain,"MYDOMAIN")

4.5 giderilmesi gerekir.Yorum bakın, henüz sabit olmamıştır ama ikinci değişken eklenmesi, geçici çözüm olarak çalışıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • UniqueApps

    UniqueApps

    4 Ocak 2009