问题描述
||
我正在使用AccessProviders来为我的ASP.Net网站(而不是内置的SQLServer Providers)提供成员资格,角色,个性化和配置文件。
我在IIS7上使用ASP.Net 2.0。一切在ASP.Net开发服务器上都可以正常工作,整个模块都可以正常工作,但是当我在IIS7上切换它时,它不起作用,当有人尝试登录时会出现以下错误:
Server Error in \'/\' Application.
AccessFile is not valid: D:\\~thewholepath~\\App_Data\\ASPNetDB.mdb
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[Exception: AccessFile is not valid: D:\\~thewholepath~\\App_Data\\ASPNetDB.mdb]
Samples.AccessProviders.AccessConnectionHelper.EnsureValidMdbFile(String fileName) +231
Samples.AccessProviders.AccessConnectionHelper.BuildConnectionForFileName(String dbFileName) +496
Samples.AccessProviders.AccessConnectionHelper.GetConnection(String dbFileName,Boolean revertImpersonation) +205
Samples.AccessProviders.AccessMembershipProvider.ValidateUser(String username,String password) +182
System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +75
System.Web.UI.WebControls.Login.AttemptLogin() +152
System.Web.UI.WebControls.Login.OnBubbleEvent(Object source,EventArgs e) +124
System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args) +70
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) +2981
Version Information: Microsoft .NET Framework Version:2.0.50727.4959; ASP.NET Version:2.0.50727.4955
我在网上搜寻了一些答案,确实得到了一些提示,但是它们似乎对我没有用。而且,所有这些解决方案的不同点在于,即使是ASP.Net开发服务器,它们的模块也无法正常工作,而我的却可以正常工作。因此,这可以清除任何恶意的ASPNetDB.mdb。
我从中收集到的是,我可能在web.config中可能犯了一些配置错误,所以这是web.config中的相关部分:
<connectionStrings>
<add name=\"AccessFileName\" connectionString=\"~/App_Data/ASPNetDB.mdb\" providerName=\"System.Data.OleDb\" />
</connectionStrings>
<authentication mode=\"Forms\">
<forms loginUrl=\"admin-login.aspx\" defaultUrl=\"index.aspx\" />
</authentication>
<authentication mode=\"Forms\">
<forms loginUrl=\"admin-login.aspx\" defaultUrl=\"index.aspx\" />
</authentication>
<membership defaultProvider=\"AccessMembershipProvider\" hashAlgorithmType=\"SHA1\">
<providers>
<clear />
<add name=\"AccessMembershipProvider\" type=\"Samples.AccessProviders.AccessMembershipProvider,SampleAccessProviders\" connectionStringName=\"AccessFileName\" enablePasswordRetrieval=\"false\" enablePasswordReset=\"false\" requiresUniqueEmail=\"false\" requiresQuestionAndAnswer=\"false\" minRequiredPasswordLength=\"8\" minRequiredNonalphanumericCharacters=\"1\" applicationName=\"fmobiles\" hashAlgorithmType=\"SHA1\" passwordFormat=\"Hashed\" />
</providers>
</membership>
<roleManager enabled=\"true\" defaultProvider=\"AccessRoleProvider\" cacheRolesInCookie=\"true\" cookieName=\".ASPXROLES\" cookieTimeout=\"30\" cookiePath=\"/\" cookieRequireSSL=\"false\" cookieSlidingExpiration=\"true\" cookieProtection=\"All\">
<providers>
<add name=\"AccessRoleProvider\" type=\"Samples.AccessProviders.AccessRoleProvider,SampleAccessProviders\" connectionStringName=\"AccessFileName\" applicationName=\"fmobiles\" />
</providers>
</roleManager>
<profile enabled=\"true\" defaultProvider=\"AccessProfileProvider\">
<providers>
<add name=\"AccessProfileProvider\" type=\"Samples.AccessProviders.AccessProfileProvider,SampleAccessProviders\" connectionStringName=\"AccessFileName\" applicationName=\"fmobiles\" description=\"Stores and retrieves profile data from an ASP.NET_Access_Providers database.\" />
</providers>
<properties>
<add name=\"FriendlyName\" type=\"string\" allowAnonymous=\"true\" serializeAs=\"String\" />
<add name=\"Height\" type=\"int\" allowAnonymous=\"true\" serializeAs=\"String\" />
<add name=\"Weight\" type=\"int\" allowAnonymous=\"true\" serializeAs=\"Xml\" />
</properties>
</profile>
<anonymousIdentification enabled=\"false\" cookieName=\".ASPXANONYMOUS\" cookieTimeout=\"100000\" cookiePath=\"/\" cookieRequireSSL=\"false\" cookieSlidingExpiration=\"true\" cookieProtection=\"None\" domain=\"\" />
<webParts>
<personalization defaultProvider=\"AccessPersonalizationProvider\">
<providers>
<add name=\"AccessPersonalizationProvider\" type=\"Samples.AccessProviders.AccessPersonalizationProvider,SampleAccessProviders\" connectionStringName=\"AccessFileName\" applicationName=\"fmobiles\" />
</providers>
</personalization>
</webParts>
大更新:我更改了AccessConnectionHelper.cs类的功能以引发实际错误而不是静态错误。现在,它告诉我The \'Microsoft.Jet.OLEDB.4.0\' provider is not registered on the local machine.
我搜索了该错误,结果发现我的机器和IIS7服务器都在x64体系结构上。可能的解决方案是为x86框架重新编译AccessProviders项目,我尝试过这样做,但随后抛出此错误:Could not load file or assembly \'SampleAccessProviders\' or one of its dependencies. An attempt was made to load a program with an incorrect format.
最新更新:在Kev先生的帮助下,错误的原因已缩小为将我的网站的应用程序池的“启用32位应用程序”设置为true,服务器人员进行了此设置,该错误消失了。现在,有一个新问题,可以正确读取维护身份验证/成员身份/角色数据的ASPNetDB.mdb文件(我知道这一点,因为当我输入错误的凭据时,该错误不是ASP.Net错误),但是文件无法写入(因为当我输入正确的凭据后,AccessProviders模块尝试将登录信息写入文件),将引发错误:\“操作必须使用可更新查询\”。我知道这只是为App_Data文件夹提供正确的权限,但是服务器人员说他们已经为该文件夹提供了适当的权限以允许写操作。因此,我现在想知道此错误是否可能是由写权限不足引起的,还是仅是服务器人员不称职?
因此,我仍然没有运气。
就是这样。非常感谢您的帮助,在此先感谢您。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)