2015-10-08 15 views
6

Ho un'applicazione MVC ospitata su un server (IIS) che punta a 3 database SQL. Questo è stato eseguito senza problemi per mesi.OWIN URI non valido: la stringa Uri è troppo lunga

Ho appena dovuto modificare le stringhe di connessione per tutti e 3 i database SQL per puntare a nuovi database.

Ora, quando provo ad entrare nel ricevo il seguente errore ..

enter image description here

Le stringhe di connessione utilizza l'autenticazione di Windows e l'account è impostato nel AppPool. Ho anche provato manualmente a connettermi a ciascuna istanza di database con l'account e questo funziona correttamente. Sto iniziando a pensare che il cambiamento è che le connessioni SQL sono solo una falsa pista.

In termini di messaggio di errore, capisco perfettamente qual è l'errore. Im non sono sicuro del motivo per cui è stato lanciato. L'unica cosa che posso pensare è che sono in una specie di ciclo di reindirizzamento che sta aggiungendo l'URL.

Sembra decisamente un problema di IIS ma non riesco a metterci il dito sopra.

Qualcuno lo ha mai incontrato prima con OWIN o può consigliare sui passaggi di debug che potrebbero diagnosticare il problema?

Startup.cs

public partial class Startup 
{ 
    private static bool IsAjaxRequest(IOwinRequest request) 
    { 
     IReadableStringCollection query = request.Query; 
     if ((query != null) && (query["X-Requested-With"] == "XMLHttpRequest")) 
     { 
      return true; 
     } 
     IHeaderDictionary headers = request.Headers; 
     return ((headers != null) && (headers["X-Requested-With"] == "XMLHttpRequest")); 
    } 


    public void ConfigureAuth(IAppBuilder app) 
    { 
     // Configure the db context, user manager and role manager to use a single instance per request 
     app.CreatePerOwinContext(ParentDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
     app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); 
     app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 
     app.CreatePerOwinContext(PrincipalManager.Create); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     // Configure the sign in cookie 
     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, Guid>(
         TimeSpan.FromMinutes(int.Parse(WebConfigurationManager.AppSettings["RefreshInterval"])), 
         (manager, user) => manager.GenerateUserIdentityAsync(user), 
         claim => new Guid(claim.GetUserId())), 
       OnApplyRedirect = ctx => 
       { 
        if (!IsAjaxRequest(ctx.Request)) 
        { 
         ctx.Response.Redirect(ctx.RedirectUri); 
        } 
       } 
      } 
     }); 

    } 
} 
+0

Mostra il tuo 'Startup.cs' – haim770

+0

@ haim770 Scuse dovrei aver incluso che per cominciare. – heymega

+0

Hai provato Fiddler o F12 ecc per acquisire le richieste http tra browser e server? –

risposta

1

Dopo ore di indagini, ho finalmente trovato il problema.

Il problema era il numero di richieste aggiunte per un utente. Una volta ridotto il numero di attestazioni, ha ripreso a funzionare.

0

La causa più probabile è che sei bloccato in un ciclo di errore. Se l'autenticazione del database in cui sono archiviati gli utenti non funziona, verrà inviata alla pagina di errore che tenterà di eseguire nuovamente l'autenticazione e fallirà e ti invierà alla pagina di errore, ancora e ancora. Ogni passaggio sarebbe aggiunto all'URL precedente fino a raggiungere questo stato.