2012-05-10 5 views
6

Ich verwende Web-Methoden an ein paar Stellen in der Intranet-Site im arbeiten und sie funktionieren gut, jedoch eine Seite wirft ständig einen HTTP 401-Fehler jedes Mal, wenn ich versuche zuzugreifen die Webmethode.VB.Net Web-Methode, die einen HTTP401 Not Authorized Fehler

Ich bin nicht sicher, wie dieses Problem anzugehen, ich habe versucht, alles aus der Web-Methode zu kommentieren, und immer noch die 401 Fehler, selbst eine einfache Verbindung mit der Datenbank nur SELECT 1 nicht erscheint, wenn ich die DB mit Profiler.

Meine web.config ist die gleiche für alle Seiten im Intranet und ich kann keine Unterschiede in meiner ASP.Net-Seite im Vergleich zu Seiten, auf denen Webmethoden funktionieren, sehen.

Kann mir jemand sagen, warum das nur für diese Seite passieren könnte und nicht für andere? Und wie kann ich dieses Problem umgehen?

Der ASP.Net-Code (aus dem OnClientClick einer Taste genannt)

function SendEmails() 
    { 

     var Grid = document.getElementById("instructorGrid"); 
     var mailBody = document.getElementById("txtMailBody"); 
     var ddlDutyPeriod = document.getElementById("DDL_DutyPeriods"); 

     var cell = Grid.rows[i].cells; 
     var HTML = cell[0].innerHTML; 
     var chkBox = cell[5].innerHTML; 

     PageMethods.TestMethod() 
    } 

Das Skript-Manager

<asp:ScriptManager ID="ScriptManager1" 
         runat="server" 
         EnableScriptGlobalization="true" 
         EnablePageMethods="true" 
         EnableScriptLocalization="true"> 
    </asp:ScriptManager> 

Der VB.Net-Code

<System.Web.Services.WebMethod()> 
    Public Shared Sub TestMethod() 

     'Dim conn1 As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

     'Dim cmd2 As New SqlCommand 

     'cmd2.CommandType = CommandType.Text 
     'cmd2.CommandText = "SELECT 1" 


     'cmd2.Connection = conn1 

     'conn1.Open() 
     'cmd2.ExecuteNonQuery() 
     'conn1.Close() 

    End Sub 

Die Fiddler Ergebnisse

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<HTML><HEAD><TITLE>Not Authorized</TITLE> 
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> 
<BODY><h2>Not Authorized</h2> 
<hr><p>HTTP Error 401. The requested resource requires user authentication.</p> 
</BODY></HTML> 

UPDATE:

ich versucht habe, mit dem Benutzer in Code wie auf halbem Weg nach unten in diesem Link Identitätswechsel http://support.microsoft.com/kb/306158 jedoch, dass kann ich nicht tun, da das Verfahren ein Webmethod ist.

Ich habe auch versucht, den anonymen Zugriff auf die Anmeldungsseite in web.config Hinzufügen wie unten vorgeschlagen, aber das hat nicht auch

+0

Hat IIS Zugriffsrechte für die Datei, auf die Sie zugreifen möchten. (NTFS-Level-Zugriff). Da der Dienst von IIS ausgeführt wird, müssen Sie dem Anwendungspoolbenutzer (oder den Benutzern) Zugriff gewähren. Versuchen Sie, IIS_IUSRS Group mit vollem Zugriff hinzuzufügen. – Nicholas

Antwort

1

Es ist ein langer Schuss half aber haben Sie dies in Ihrem Web.Config?

<system.web.extensions> 
    <scripting> 
    <webServices> 
     <authenticationService enabled="true" /> 
    </webServices> 
    </scripting> 
</system.web.extensions> 
+0

Nein, sollte ich haben? – Purplegoldfish

+0

Ich hatte dieses Problem vor und fügte hinzu, dass es gelöst wurde - ich schaffte es, einen Link zu finden, der es erklärte, aber es jetzt nicht finden kann (wird posten, wenn ich darauf stoße) –

+0

Danke Kevin, ich habe gerade versucht, es hinzuzufügen, aber es nicht help :( – Purplegoldfish

2

Ich denke, dass Sie FormsAuthentication verwenden. Sie müssen Ihrer Anmeldeseite anonymen Zugriff gewähren.

<location path="Login.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 
+0

Würde dies nur diese eine Seite betreffen, verwende ich Web-Methoden auf anderen Seiten innerhalb der gleichen Website und sie funktionieren gut. – Purplegoldfish

+0

Ich hatte das gleiche passiert mir nur letzte Woche. Ich habe nicht vertieft herauszufinden warum es für eine Seite passierte und nicht für eine andere Seite Auch das Hinzufügen eines anonymen Zugangs zu Ihrer Anmeldeseite wird empfohlen und ergibt einen Sinn – TheGeekYouNeed

+0

Versucht, aber das scheint nicht zu helfen.Ist es wichtig, dass die Seite eine Mischung aus Classic und .Net ist, denke ich, dass der Login klassisch ist. – Purplegoldfish

2

Fügen Sie das Identitätswechsel-Tag in Ihrer Datei web.config hinzu. Dies sollte den Identitätswechsel mit einem bestimmten Konto ermöglichen, wenn Sie versuchen, auf Ihre Webmethode zuzugreifen. Sehen Sie diese Unterstützung article für Richtung.

<system.web> 

<identity impersonate="true" userName="Yang" password="bar" /> 

</system.web>