1

我在我的MVC應用程序中有一個奇怪的行爲。在某些時候,我開始在所有頁面出現奇怪的Format of the initialization string does not conform to specification starting at index 0.錯誤。ApplicationDbContext的DefaultConnection字符串的隨機和不一致的錯誤

我說這是隨機的,不一致的,這是因爲:

  1. 它開始發生時,任何連接字符串未進行任何更改
  2. 我得到火狐錯誤的大部分時間
  3. 在同時它在Chrome和IE中工作

現在,有問題的連接字符串是由我的發佈配置文件添加的,它看起來像這樣:

<add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient" />

Related Question

當我刪除此連接字符串,Firefox中的錯誤更改爲

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

(再次,它工作於Chrome和IE非常相同的時間)。

通過「它的作品」我的意思是,我可以用我的域名證書(它應該使用AD認證)登錄頁面,通過頁面瀏覽等

我的MVC應用程序只應該使用EF直接用於審計跟蹤日誌記錄(可選地,存儲在本地數據庫中)。 爲此,我建立了一個單獨的DbContext類,它指向一個特定的單獨連接字符串 - 這一切都很好。所使用的樣板OWIN認證碼被用於通過ApplicationDbContext

在「DefaultConnection」:

enter image description here

業務數據訪問層被分離成不同的web API和我有正確的DbContext和連接字符串在那裏設置(也工作正常) 我的web應用程序的身份驗證也是在單獨的web API中完成的。我將HTTPS帖子中的憑證傳遞給API,使用PrincipalContext驗證它們並將一組索賠返回給Web應用程序。

在那裏,我得到IAuthenticationManager this.HttpContext.GetOwinContext().Authentication

的實例,並做標誌與我ClaimsIdentity例如

this.AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = rememberMe }, identity);

現在,有兩個問題:

  1. 似乎我不需要ApplicationDbContext和在我的應用程序中使用它的位?我的意思是這些:

app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

  • 爲什麼它開始拋出錯誤,爲什麼它仍然在其他瀏覽器?
  • 多謝建議!

    ==========================

    UPDATE 其實,現在我收到的Chrome相同的錯誤好了,這讓我覺得這必須涉及到多長時間了一直以來我已經登錄到網頁上的瀏覽器...或東西...

    所以,清除Cookie後,我再次頁作品在給定瀏覽器。什麼爲什麼?

    +0

    這聽起來可疑重複工作。您的應用程序正在運行多少個實例? –

    +0

    @MarkC。嘿馬克,不知道我理解這個問題。該應用程序託管在IIS上,你如何計算實例?實例在Web應用程序中的含義是什麼? – Bartosz

    +0

    這是隻在一臺服務器上運行嗎? –

    回答

    0

    好了,現在我知道了。

    的原因是代碼的樣板ConfigureAuth()方法內的「OnValidateIdentity」位。

    app.UseCookieAuthentication(new CookieAuthenticationOptions 
          { 
           AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
           LoginPath = new PathString("/Account/Login"), 
           Provider = new CookieAuthenticationProvider 
           { 
            // Enables the application to validate the security stamp when the user logs in. 
            // This is a security feature which is used when you change a password or add an external login to your account. 
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
             validateInterval: TimeSpan.FromMinutes(30), 
             regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
           }, 
    
    
          }); 
    

    它試圖在指定的時間間隔(30分鐘)後調用身份驗證。所以,從我登錄的30分鐘後,它試圖驗證身份,從而調用有問題的DbContext。

    它有時工作「,爲什麼我把它叫做隨機/不一致的是,每一個現在,然後我會清除cookies或者嘗試不同的瀏覽器,它不包含我的餅乾觸發驗證的原因。然後,我會看到它的工作,並在相當一段時間