При запуске моего сайта с моего сервера я получаю сообщение об ошибке сервера в «/» приложении.Значение не может быть нулевым.Имя параметра: тип - PullRequest
0 голосов
/ 08 августа 2010

Пожалуйста, смотрите в конце поста подробное вставление ошибки и соответствующие разделы моего web.config

Я использую VS2010, vb.net, .net framework 4.0 и SQL Server 2008 Express в Windows 7 Pro со всеми установленными обновлениями. Я разработал веб-сайт, который использует членство, профили и роли. Я позволил встроенным провайдерам создать для меня файл aspnetdb.mdf в папке App_Data. Я добавил несколько собственных таблиц в aspnetdb.mdf, чтобы у меня была единая база данных для всех данных моего сайта.

Я размещаю сайт на своем собственном сервере. Он использует Windows 2003 Server, IIS 6, SQL 2008 Express, и все мое программное обеспечение, включая ОС, содержит самые последние пакеты обновлений, обновления и все обновления .net Framework, включая 4.0. Не осталось обновлений для установки, и я уверен, что моя проблема не в отсутствующей версии обновления или фреймворка.

Я скопировал файлы aspnetdb.mdf и .ldf из папки app_code в папку sql express на моем сервере и прикрепил базу данных. Я делаю это потому, что не хочу, чтобы файл автоматически прикреплялся, потому что в будущем я, скорее всего, буду использовать коммерческий хостинг. Я добавил пользователя сервера SQL с правами собственности на БД. сильный текст

Затем я изменил строку подключения в web.config, чтобы она указала на UNC моего экземпляра SQL на моем сервере и прошла аутентификацию с именем пользователя и паролем сервера sql, которые я установила с правами собственности на эту базу данных. Я обновил свои поставщики членства, роли и профиля в своем файле web.config, чтобы использовать новую строку подключения sql, и я обязательно включил параметр application = "/" и использовал его перед каждым поставщиком.

Я могу нормально запускать сайт с моей машины для разработки. Я могу войти в него и использовать все его функции. Однако, когда я публикую сайт на своем сервере, я могу получить доступ к сайту как локально, так и через Интернет. Я могу перемещаться по нему, и он извлекает все данные из таблиц, которые я сам добавил в базу данных, но , когда я пытаюсь войти в него или создать новую учетную запись (в основном все, что использует членство, роли или профили) сайт падает с ошибкой и всеми данными ниже.

Я проверил, что имя приложения в моей базе данных aspnetdb на самом деле просто "/". Я убедился, что я работаю из пула приложений, использующего инфраструктуру 4.0. Многое из того, что я погуглил и прочитал, похоже, указывает на проблему с моими провайдерами, но я не могу понять, почему он отлично работает в Casini (или как называется сервер разработки) на моей локальной машине, но вылетает в моей сети сервер. В обоих случаях они подключаются к одной базе данных.

Буду очень признателен, если кто-нибудь скажет мне, что я здесь делаю неправильно. Ниже приводится полная ошибка, отображаемая моим сервером при сбое сайта, а также соответствующие разделы моего файла web.config.

Полное содержание сообщения об ошибке и соответствующие разделы web.config приведены ниже:

Ошибка сервера в приложении '/'.


Значение не может быть нулевым. Имя параметра: тип Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: тип

Ошибка источника: Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[ArgumentNullException: значение не может быть нулевым. Имя параметра: тип] System.Activator.CreateInstance (тип Type, логический непубличный тип) +9643414System.Web.Profile.ProfileBase.CreateMyInstance (строковое имя пользователя, логическое значение isAuthenticated) +79 System.Web.Profile.ProfileBase.Create (строковое имя пользователя, логическое значение isAuthenticated) +247 System.Web.HttpContext.get_Profile () +107 _perfect.get_Profile () +20 _perfect.Page_Load (Отправитель объекта, 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 (логическое значение includeStagesBeforeAsyncPoint, логическое значение 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>

1 Ответ

1 голос
/ 08 августа 2010

При каждом использовании профилей в ASP.NET создается подкласс ProfileBase, который обеспечивает типизированный доступ к свойствам вашего профиля . Этот класс называется ProfileCommon. Этот класс будет возвращен, если вы позвоните HttpContext.Profile. Этот класс будет доступен в файле App_Code.dll, который должен быть сгенерирован при публикации вашего сайта.

Убедитесь, что у вас есть этот файл в каталоге bin вашего опубликованного сайта. Если нет, вам, вероятно, придется изменить один или несколько параметров публикации. Я прочитал сообщение в блоге , где кто-то упомянул опцию «удалить файл App_Code.Compiled».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...