我已經部署到服務器的一個asp.net MVC應用程序,它使用窗體身份驗證,並使用CustomSqlMembership提供商基本上我沒有在SqlMembershipProvider的改變任何東西只是複製從MS源和包含在源我項目,並不時重新命名它出現這個錯誤。CustomSqlMembership拋出服務器錯誤間歇
這發生在本地主機和遠程部署的系統上,我找不出可能的原因。
'/'應用程序中的服務器錯誤。 配置錯誤 描述:處理服務此請求所需的配置文件時發生錯誤。請查看下面的具體錯誤細節並適當修改您的配置文件。
解析器錯誤消息:未將對象引用設置爲對象的實例。
源錯誤:
Line 50: <clear/>
Line 51: <!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="dq_systemConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/>-->
Line 52: `<add name="CustomSqlMembershipProvider" type="AcmeCorp.CustomSqlMembershipProvider, AcmeCorp, Version=1.0.0.0, Culture=neutral" connectionStringName="AcmeCorpConnectionString" enablePasswordRetrieval="False" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="True" passwordFormat="Hashed" maxInvalidPasswordAttempts="6" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />`
Line 53: </providers>
Line 54: </membership>
這是會員對象在web.config中
<membership defaultProvider="CustomSqlMembershipProvider">
<providers>
<clear />
<!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="dq_systemConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />-->
<add name="CustomSqlMembershipProvider" type="AcmeCorp.CustomSqlMembershipProvider, AcmeCorp, Version=1.0.0.0, Culture=neutral" connectionStringName="dq_systemConnectionString" enablePasswordRetrieval="False" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="True" passwordFormat="Hashed" maxInvalidPasswordAttempts="6" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />
public class CustomSqlMembershipProvider : AcmeCorp.SqlMembershipProvider
{
static public ConnectionStringSettings css {get; set;}
public override void Initialize(string name, NameValueCollection config)
{
config.Add("connectionString", css.ConnectionString);
base.Initialize(name, config);
}
}
public class CustomSqlRoleProvider : AcmeCorp.SqlRoleProvider
{
static public ConnectionStringSettings css { get; set; }
public override string GetConnectionString()
{
return css.ConnectionString;
}
public override void Initialize(string name, NameValueCollection config)
{
//config.Add("connectionString", css.ConnectionString);
base.Initialize(name, config);
}
}
public interface ISiteProvider
{
bool Initialise(string host);
Site GetCurrentSite();
}
public class SiteProvider : ISiteProvider
{
SystemMetaDataContext mDB;
Site mSite;
public SiteProvider(SystemMetaDataContext db)
{
mDB = db;
}
public bool Initialise(string host)
{
mSite = mDB.Sites.SingleOrDefault(s => s.Host == host);
if (null != mSite)
{
CustomSqlMembershipProvider.css = new ConnectionStringSettings();
CustomSqlMembershipProvider.css.ConnectionString = mSite.Connection;
CustomSqlMembershipProvider.css.ProviderName = "System.Data.SqlClient";
CustomSqlMembershipProvider.css.Name = "dq_systemConnectionString";
CustomSqlMembershipProvider.css.ConnectionString = mSite.Connection;
CustomSqlRoleProvider.css = new ConnectionStringSettings();
CustomSqlRoleProvider.css.ConnectionString = mSite.Connection;
CustomSqlRoleProvider.css.ProviderName = "System.Data.SqlClient";
CustomSqlRoleProvider.css.Name = "dq_systemConnectionString";
CustomSqlRoleProvider.css.ConnectionString = mSite.Connection;
return true;
}
else
{
return false;
}
}
public Site GetCurrentSite()
{
return mSite;
}
}
public class BaseController : Controller
{
ISiteProvider mSiteProvider;
protected IRepository mRepository { get; private set; }
protected int DefaultPageSize { get; set; }
public BaseController()
{
DefaultPageSize = 10;
mSiteProvider = new SiteProvider(new SystemMetaDataContext());
}
public BaseController(IDQRepository repository)
{
mRepository = repository;
DefaultPageSize = 10;
if (Session["ActiveView"] == null)
{
IList<RoleViewModel> roles = mRepository.GetAllRoles();
foreach (RoleViewModel rvm in roles)
{
if (Roles.IsUserInRole(rvm.Name))
{
Session["ActiveView"] = rvm.Name;
break;
}
}
}
}
protected override void Initialize(RequestContext requestContext)
{
string[] host = requestContext.HttpContext.Request.Headers["Host"].Split(':');
MetaInfo.PopulateMeta(host[0]);
if (!mSiteProvider.Initialise(host[0]))
RedirectToRoute("Default");
if (null == mRepository)
mRepository = new DQRepository();
base.Initialize(requestContext);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["Site"] = Site;
base.OnActionExecuting(filterContext);
}
public Site Site {
get {
return mSiteProvider.GetCurrentSite();
}
}
你說你基本上沒有改變在供應商代碼什麼。爲什麼你需要自定義提供者呢?您遇到最有可能 錯誤源於不正確的引用,從您的自定義供應商實現類'Web.Config' –
我想有動態連接字符串,不能做,沒有一個自定義的成員提供。因爲這是一個多租戶SAAS應用程序,並且取決於主機名,我從其他數據庫獲取連接字符串併爲此數據庫設置連接字符串。 – AppDeveloper
另外我在一個共享主機上運行,但這是一個有爭議的問題,因爲我已經看到這發生在我的localhost asp.net dev服務器上。 – AppDeveloper