2009-05-04 15 views
0

Symptom:
Einige Benutzer können nicht erfolgreich POST, die meisten erfolgreich POST.
Wenn der Fehler auftritt, werden Benutzer auf die Seite Shared/Error der Site umgeleitet.Fehlerbehebung Authentifizierungsfehler

Eingesetzte Technologien:
IIS v6
Windows Server 2003
asp.net v3.5
asp.net MVC-Framework v1.0
jQuery
Linq
SQL Server 2005

Authentifizierung : Windows mit dem AspNetActiveDirectoryMembershipProvider
Hier ist ein Ausschnitt der web.config:

<authentication mode="Windows"/> 
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> 
    <providers> 
      <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,&#xA;     System.Web, Version=2.0.3600.0, Culture=neutral,&#xA;     PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnString" connectionUsername="" connectionPassword=""/> 
     </providers> 
    </membership> 

Hier ist der Link von der Ansicht, dass die Save startet
<a href="javascript:void(document.frmCurrentLineItems.submit())" title="Saves this month only">Save This Month</a>

Hier einige der jQuery basierte javascript:

$("form#frmCurrentLineItems").submit(function() { 
    submitView(this); 
    return false; 
}); 

function submitView(form) {   
    $.ajax(
      { 
       type: form.method, 
       url: form.action, 
       data: $(form).serialize(), 
       dataType: "html", 
       error: function(error) { 
        alert(error); 
       } 
      } 
     ); 
} 

Hier ist ein Teil der Controller-Methode:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult CurrentLineItems(FormCollection thisForm) 
    // Get the forecast from the session 
    BusinessLogic.ForecastBL thisForecast = (BusinessLogic.ForecastBL)HttpContext.Session["ForecastMetaData"]; 

     if (thisForecast != null) 
     { 
      // Run the save to db stuff here 
      return View("CurrentLineItems", ViewData["LineItemSummary"]); 
     } 
     else 
     { 
      return Redirect("../Shared/Error"); 
     } 

Eine Anmerkung über den obigen Code ... Ich bin ziemlich sicher, dass ziehen Das Vorhersageobjekt außerhalb der Sitzung verursacht den Fehler nicht, zumindest gehe ich davon aus, dass die Sitzung nicht abgelaufen ist, weil die Benutzer, die nicht speichern können, nicht speichern können, wenn sie die Seite öffnen und dann sofort versuchen zu speichern.

Die Klasse hat auch diese Attribute:

[HandleError] 
[Authorize] 
public class ForecastController : Controller 
{ 

Die Seite hat, in IIS Eigenschaften, in den Authentifizierungsmethoden:
Aktivieren Sie die anonyme Zugriff nicht aktiviert und integrierte Windows-Authentifizierung überprüft.

Hier ist ein Blick auf dem IIS-Protokoll von einem Benutzer, der dieses Problem auftritt:

466 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22 POST/Prognose/CurrentLineItems - 443 - XX.XX .XX.XX Mozilla/4.0 + (kompatibel; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; +. NET + CLR + 1.1.4322) 401 1 0
467 2009-04-28 16:41 : 15 W3SVC1100645706 192.168.10.22 POST/Prognose/CurrentLineItems - 443 DOMÄNE \ Benutzername XX.XX.XX.XX Mozilla/4.0 + (kompatibel; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; +. NET + CLR +1.1.4322) 302 0 0
468 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22 GET/Geteilt/Error - 443 - XX.XX.XX.XX Mozilla/4.0 + (kompatibel; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; +. NET + CLR + 1.1.4322) 401 1 0
469 2009-04-28 16:41:16 W3SVC1100645706 192.168.10.22 GET/Geteilt/Error - 443 DOMÄNE \ Benutzername XX.XX.XX.XX Mozilla/4.0 + (kompatibel; + MSIE + 7.0; . + Windows-NT + + 5.1; + GTB5; + NET + CLR + 1.1.4322) 404 0 0

Hier die gleichen Linien für hoffentlich eine bessere Lesbarkeit abgespeckte:
2009-04-28 16.41.15 POST/Prognose/CurrentLineItems - 443 - XX.XX.XX.XX 401 1 0
2009-04-28 16:41:15 POST/Prognose/CurrentLineItems - 443 DOMAIN \ Benutzername XX.XX.XX.XX 302 2009-04-28 16:41:15 GET/Geteilt/Fehler - 443 - XX.XX.XX.XX 401 1 0
2009-04-28 16:41:16 GET/Geteilt/Fehler - 443 DOMAIN \ Benutzername xx.xx.xx.xx 404 0 0

habe gerade bemerkt, dass alle POST-Anfragen die oben aussehen ... mit Ausnahme des erfolgreichen jemandes eine 200 auf dem zweiten POST zurückkehren ...

wie stelle ich fest, was den ersten POST verursacht, der oben auf dem Webserver ohne die DOMÄNE \ Benutzername-Info und einen Fehler 401 ist?

Auch warum der Fehler 302?

Scheint so, als würde ich nach zwei POSTS fragen ... aber ich verstehe nicht recht, warum der Browser zwei POST-Anfragen sendet? (natürlich ... ich vermute meinen Code, kann aber nicht recht herausfinden, warum.)

Alle Methoden zur Problembehandlung, die helfen, die oben genannten Fehler aufzuspüren, wären willkommen.

Am einen Blick jetzt auf Troubleshooting HTTP 401 errors in IIS bearbeiten nehmen .... dies nicht wirklich helfen w/mein Problem

Antwort

0

Ändern der Link auf eine Eingabeknopf/Element scheint dieses Problem gelöst zu haben ...
<input type="submit" value="Save This Month" title="Saves this month only" class="submitBtn"/>

Da die Eingabe-Taste möchte ich in der Form einzureichen ... es die Controller-Aktion Pfosten und speichert die Daten und zeigt dann die Ansicht ...

2

Die erste 401, Sie werden immer wieder Teil des NTLM-Authentifizierungsschema ist, ist es, wie Griffe IIS Windows-Authentifizierung. Eine Anfrage wird gestellt, sie gibt 401 zurück, also versucht sie erneut, die NTLM-Authentifizierungsinformation zu übergeben.

So kommt Ihre erste Post herein, erhält eine 401, dann versucht es mit Authentifizierung und erhält eine 302. Dies ist Ihre Weiterleitung zu Ihrer Fehlerseite. Dann bekommen Ihre Fehlerseiten eine 401, versuchen es erneut und erhalten eine 404.

So haben Sie zwei Probleme, die erste ist eine Art von Fehler in Ihrem Controller. Es könnte die Null-Check-Weiterleitung sein, oder es könnte ein anderer Fehler sein, protokollieren Sie Ihre Fehler? Außerdem würde ich eine Ausnahme auslösen, anstatt umzuleiten ... dann sollte Ihre handleError-Logik eingreifen und sie für Sie behandeln.

Die zweite ist, dass es aussieht, als ob Ihre Fehlerseite nicht existiert oder Ihr Routing ist durcheinander.

+0

James, Danke, dass du dir die Zeit genommen hast zu antworten. Ich scheine die Fehler zu lösen, indem ich den Link oben auf einen Eingabeknopf mit einem Submit-Typ änderte ... Danke nochmal – w4ik