2012-05-10 19 views
6

Uso métodos web en un par de sitios en el sitio de intranet en los que trabajo y funcionan bien, sin embargo, una página arroja constantemente un error HTTP 401 cada vez que intento acceder el método webVB.Net Método web dando un error HTTP401 no autorizado

Im no estoy seguro de cómo abordar este problema, he intentado comentar todo fuera del método web, y todavía obtener el error 401, incluso una conexión básica a la base de datos solo SELECT 1 no aparece cuando veo el DB con perfilador.

Mi web.config es la misma para todas las páginas en la intranet y no puedo ver ninguna diferencia en mi página ASP.Net en comparación con las páginas donde funcionan los métodos web.

¿Alguien puede decirme por qué esto podría estar pasando solo por esta página y otras no? Y también ¿cómo puedo evitar este problema?

el código ASP.Net (llamado desde el OnClientClick de un botón)

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() 
    } 

El script manager

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

el código VB.Net

<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 

Los resultados Fiddler

<!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> 

ACTUALIZACIÓN:

He intentado usar hacerse pasar por el usuario en un código como la mitad hacia abajo en este enlace http://support.microsoft.com/kb/306158 sin embargo yo puedo hacer eso ya que el método es un WebMethod.

También he intentado añadir el acceso anónimo a mi página de inicio de sesión en Web.config como se sugiere a continuación, pero esto también ya no haya ayudado

+0

IIS tiene derechos de acceso al archivo al que intenta acceder. (Acceso a nivel NTFS). Como el Servicio lo ejecuta IIS, deberá otorgar acceso al Usuario del grupo de aplicaciones (o Usuarios). Pruebe agregar IIS_IUSRS Group con acceso completo. – Nicholas

Respuesta

1

Es una posibilidad remota, pero ¿Tiene esto en su Web.Config?

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

No, ¿Debería tenerlo? – Purplegoldfish

+0

He tenido este problema antes y agregué que lo resolvió - logré encontrar un enlace que lo explicó pero no lo puede encontrar ahora (se publicará si lo encuentro) –

+0

Gracias Kevin, intenté agregarlo pero no lo hice help :( – Purplegoldfish

2

Creo que estás utilizando FormsAuthentication. Debe dar acceso anónimo a su página de inicio de sesión.

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

Esto solo afectaría a esta página, utilizo métodos web en otras páginas dentro del mismo sitio web y funcionan bien. – Purplegoldfish

+0

Me pasó lo mismo la semana pasada. No profundicé en averiguar por qué sucedía para una página y no otra. Además, se recomienda agregar acceso anónimo a su página de inicio de sesión y tener sentido. – TheGeekYouNeed

+0

Intentó pero esto no parece ayudar.¿Importa que el sitio sea una mezcla de Classic y .Net, el inicio de sesión creo que es clásico? – Purplegoldfish

2

Agregue la etiqueta de suplantación en su archivo web.config. Esto debería permitir la suplantación con una cuenta específica al intentar acceder a su método web. Vea este soporte article para la dirección.

<system.web> 

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

</system.web> 
Cuestiones relacionadas