【问题标题】:When running my site from my server I receive Server Error in '/' Application. Value cannot be null. Parameter name: type从我的服务器运行我的站点时,我在“/”应用程序中收到服务器错误。值不能为空。参数名称:类型
【发布时间】:2010-08-08 16:47:36
【问题描述】:

有关错误的详细粘贴以及我的 web.config 的相关部分,请参阅帖子末尾

我在安装了所有更新的 Windows 7 Pro 上使用 VS2010、vb.net、.net framework 4.0 和 SQL Server 2008 Express。我开发了一个使用会员、个人资料和角色的网站。我允许内置提供程序在 App_Data 文件夹中为我创建 aspnetdb.mdf 文件。我在 aspnetdb.mdf 中添加了一些我自己的表,这样我就可以为我网站的所有数据创建一个数据库。

我将网站托管在自己的服务器上。它使用 Windows 2003 Server、IIS 6、SQL 2008 Express,并且我的所有软件(包括操作系统)都是最新的,包含最新的服务包、更新和所有 .net 框架更新,包括 4.0。没有更新需要安装,我确定我的问题不是由于缺少更新或框架版本。

我将 aspnetdb.mdf 和 .ldf 文件从我的 app_code 文件夹复制到我服务器上的 sql server express 文件夹并附加了数据库。我这样做是因为我不希望文件自动附加,因为我将来可能会使用商业托管服务。我向数据库添加了一个具有所有权的 sql server 用户。强文本

然后我修改了 web.config 中的连接字符串以指向我服务器上的 SQL 实例的 UNC,并使用我设置的具有该数据库所有权的 sql 服务器用户名和密码进行身份验证。我在我的 web.config 文件中更新了我的成员资格、角色和配置文件提供程序以使用新的 sql 连接字符串,并且我确定包含 application="/" 设置并在每个提供程序之前使用。

我可以在我的开发机器上很好地运行该站点。我可以登录它并使用它的所有功能。但是,当我将站点发布到我的服务器时,我可以通过我的 Intranet 和 Internet 在本地访问该站点。我可以在它上面导航,它会从我自己添加到数据库的表中检索所有数据,但是当我尝试登录它或创建一个新帐户时(基本上任何使用成员资格、角色的,或配置文件)网站崩溃并显示错误和以下所有数据。

我已检查并确认我的 aspnetdb 数据库中的应用程序名称实际上只是“/”。我确保我是从使用 4.0 框架的应用程序池中运行的。我所做的大部分谷歌搜索和阅读似乎都表明我的提供商有问题,但我不明白为什么它在我的本地机器上的 Casini(或任何调用的开发服务器)上完美运行,但在我的网络上崩溃服务器。在这两种情况下,它们都连接到同一个数据库。

如果有人能告诉我我在这里做错了什么,我将不胜感激。以下是我的服务器在网站崩溃时显示的完整错误以及我的感觉是我的 web.config 文件的相关部分。

错误信息的完整内容和web.config的相关部分如下:

“/”应用程序中的服务器错误。


值不能为空。 参数名称:类型 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentNullException:值不能为空。 参数名称:类型

来源错误: 在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[ArgumentNullException:值不能为空。 参数名称:类型] System.Activator.CreateInstance(类型类型,布尔非公共)+9643414 System.Web.Profile.ProfileBase.CreateMyInstance(字符串用户名,布尔 isAuthenticated)+79 System.Web.Profile.ProfileBase.Create(String username, Boolean isAuthenticated) +247 System.Web.HttpContext.get_Profile() +107 _perfect.get_Profile() +20 _perfect.Page_Load(Object sender, EventArgs e) +368 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,对象 o,对象 t,EventArgs e)+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+35 System.Web.UI.Control.OnLoad(EventArgs e) +91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Control.LoadRecursive() +146 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207


版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1

web.config 中的连接字符串和提供程序如下:

<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=Server1\SQLEXPRESS; Initial Catalog=************; User ID=*******; Password=********" providerName="System.Data.SqlClient" /
</connectionStrings>

<roleManager enabled="true" defaultProvider="PerfectTenseRoleProvider">
  <providers>
    <clear />
    <add name="PerfectTenseRoleProvider" 
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="ConnectionString" 
         applicationName="/" 
     />
  </providers>      
</roleManager>

  <providers>
    <clear />
    <add name="PerfectTenseProfileProvider" 
         type="System.Web.Profile.SqlProfileProvider" 
         connectionStringName="ConnectionString"
         applicationName="/"
     />
  </providers>
  <properties>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
            <add name="*****" type="string"/>
        </properties>
    </profile>
    <membership defaultProvider="AspNetSqlMembershipProviderRelaxed">
        <providers>
    <clear />

    <add name="AspNetSqlMembershipProviderRelaxed" 
         type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
         connectionStringName="ConnectionString" 
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="true" 
         requiresUniqueEmail="false" 
         passwordFormat="Hashed" 
         maxInvalidPasswordAttempts="5" 
         minRequiredPasswordLength="7" 
         minRequiredNonalphanumericCharacters="0" 
         passwordAttemptWindow="10" 
         passwordStrengthRegularExpression=""
         applicationName="/"
     />
  </providers>
  </membership>

【问题讨论】:

    标签: asp.net vb.net visual-studio-2010


    【解决方案1】:

    每当您在 ASP.NET 中使用配置文件时,都会生成一个提供 typed access to your profile propertiesProfileBase 子类。这个类被称为ProfileCommon。如果您调用HttpContext.Profile,则该类将被返回。此类将在您发布网站时应生成的 App_Code.dll 文件中提供。

    检查您在已发布网站的bin 目录中是否有此文件。如果没有,您可能必须更改一个或多个发布选项。我读到了blog post,其中有人提到了一个名为“删除 App_Code.Compiled 文件”的选项。

    【讨论】:

    • 感谢您的回复。我也遇到过许多提到这个“删除 App_Code.Compiled 文件”的博客文章,但我似乎在 VS 2010 中找不到这个选项。
    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2017-09-05
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多