我们正在使用MS Commerce Server的Microsoft.CommerceServer.Runtime.Profiles.UpmMembershipProvider
,有时在应用重启后首次初始化时我们会收到此错误:
System.Configuration.ConfigurationErrorsException - System.Web, Object reference not set to an instance of an object. (C:\Inetpub\web.config line 425)
at System.Web.Security.Membership.Initialize()
at System.Web.Security.Membership.get_Provider()
...
第425行是会员提供者规范:
<membership defaultProvider="UpmMembershipProvider">
<providers>
<clear />
<add name="UpmMembershipProvider"
applicationName="app"
enablePasswordRetrieval="false"
enablePasswordReset="true"
logonNameProperty="GeneralInfo.logon_name"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
enableCreateDate="true"
enableEmailAddress="true"
enableLastLoginDate="true"
profileDefinition="UserObject"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="1"
type="Microsoft.CommerceServer.Runtime.Profiles.UpmMembershipProvider" />
</providers>
</membership>
我们采用了内存转储,这就是我们得到的:
0:025> !dumpstack
OS Thread Id: 0x1080 (25)
Current frame: kernel32!RaiseException+0x53
ChildEBP RetAddr Caller,Callee
1213e5d8 7d4e237e kernel32!RaiseException+0x53, calling ntdll!RtlRaiseException
1213e5ec 79e8002c mscorwks!Binder::RawGetClass+0x20, calling mscorwks!Module::LookupTypeDef
1213e5fc 79e8068f mscorwks!Binder::IsClass+0x23, calling mscorwks!Binder::RawGetClass
1213e608 79ef2a0f mscorwks!Binder::IsException+0x14, calling mscorwks!Binder::IsClass
1213e618 79ef2a36 mscorwks!IsExceptionOfType+0x23, calling mscorwks!Binder::IsException
1213e620 79ef2bbc mscorwks!RaiseTheExceptionInternalOnly+0x2a8, calling kernel32!RaiseException
1213e668 79e81e3d mscorwks!SetObjectReferenceUnchecked+0x19
1213e680 79fccf80 mscorwks!JIT_Throw+0xfc, calling mscorwks!RaiseTheExceptionInternalOnly
1213e6b8 79295aea (MethodDesc 0x791aad5c +0xa System.Collections.CompatibleComparer.Equals(System.Object, System.Object)), calling (MethodDesc 0x791aad50 +0 System.Collections.CompatibleComparer.Compare(System.Object, System.Object))
1213e6d4 792e5fcd (MethodDesc 0x7910c3d0 +0xcd System.Collections.Hashtable.get_Item(System.Object))
1213e6f4 79fcced5 mscorwks!JIT_Throw+0x1e, calling mscorwks!LazyMachStateCaptureState
1213e70c 792861dc (MethodDesc 0x791a5f58 +0x1c System.RuntimeType.IsPrimitiveImpl()), calling mscorwks!TypeHandle::GetSignatureCorElementType
1213e724 7a57b600 (MethodDesc 0x7a4abadc +0x70 System.Configuration.SettingsBase.GetPropertyValueByName(System.String)), calling (MethodDesc 0x7a4ac288 +0 System.Configuration.SettingsPropertyValue.get_PropertyValue())
1213e744 66918ad7 (MethodDesc 0x65f9871c System.Web.Security.Membership.Initialize()), calling mscorwks!JIT_Throw
1213e7a0 6673ecb9 (MethodDesc 0x65f985a0 +0x5 System.Web.Security.Membership.get_Provider()), calling (MethodDesc 0x65f9871c +0 System.Web.Security.Membership.Initialize())
...
之前有人遇到过这样的事吗?每次应用程序重新启动时都不会发生这种情况,并且它似乎不在某个特定服务器上(站点在负载均衡器后面的多个服务器上运行)
答案 0 :(得分:3)
我在ASP.NET中使用SQL成员资格提供程序时遇到了同样的问题。
这是一个配置问题。某些参数设置不正确。
也许这篇文章会对你有帮助。
我能想到的(此时此刻)是你遇到了type属性的问题,或者你没有将所有必需的依赖项复制到你的Bin ..
祝你好运答案 1 :(得分:0)
你有没有在另一台机器上测试这种移植(不仅仅是会员资格,我的意思是整个应用程序配置)?
您确定您的应用程序符合Commerce Server的所有要求吗? 最后我建议你在第一次配置的时候在虚拟机上安装你的商务服务器(不要复制配置文件 - 新的)并测试是否有错误?如果问题已解决(用虚拟机配置文件替换当前配置文件,
如果您的错误仍然存在,则表示您的配置存在问题,您应该更改它。
让我知道在另一台(虚拟)机器上重新安装后会发生什么。
答案 2 :(得分:0)
之前我遇到过类似的问题。问题是由于使用具有多个Web服务器的InProc会话状态。当一个应用程序没有脱机时,负载均衡器会尝试将所有会话转发到新服务器。新服务器没有来自这些用户的会话,因此当成员资格提供程序尝试访问会话对象时,我们收到Object Not Set to...
错误。
要解决此问题,我们设置了一个SQL Server来管理会话。您可以看到如何执行此操作here。
答案 3 :(得分:0)
不是
中web.config中指定的类型type="Microsoft.CommerceServer.Runtime.Profiles.UpmMembershipProvider"
必须遵循System.Type.GetType(string typeName)
文档中指定的约定,即是否必须包含程序集,也可能包含版本号和所有爵士乐?至少像是:
type="Microsoft.CommerceServer.Runtime.Profiles.UpmMembershipProvider, Microsoft.FancyCommerceServerAssembly"
甚至
type="Microsoft.CommerceServer.Runtime.Profiles.UpmMembershipProvider, Microsoft.FancyCommerceServerAssembly, Version=6.6.6.0, Culture=neutral, PublicKeyToken=..."