none
Error de la solicitud con el código de estado HTTP 401 RRS feed

  • Pregunta

  • Buenos días

    Tengo un website donde me logueo con un usuario del active directory, hasta allí todo bien; porque cuando lo debagueo confirmo que sí lo hace.

    El problema es cuando llama a un método GetSec_groupings que obtiene un valor de la base de datos

    Cuando debagueo veo este error:

    System.Net.WebException: Error de la solicitud con el código de estado HTTP 401: Unauthorized.\r\n   
    en System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse
    (SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)\r\n   
    en System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)\r\n   
    en wsAccesosRRHH.wsAccesosRRHH.GetSec_groupings(String application, String group_name, String user_name, String usuario) 
    en c:\\Users\\usuweb\\AppData\\Local\\Temp\\Temporary ASP.NET Files\\website20\\219a2537\\3073cd00\\App_WebReferences.nch5lsvu.0.cs
    :línea 259\r\n

    Mi IIS está en un servidor windows server 2012. mi application pool está como Enabled anonymous le he puesto como specific user a IUSR y le  he dado acceso a la carpeta C:\inetpub\wwwroot a IUSR.

    Hice la prueba seleccionando el application pool identity, igual me sale el error.

    Estoy utilizando visual studio 2008 con c#, sql server 2000

    Gracias por sus respuestas!

    miércoles, 15 de noviembre de 2017 15:23

Respuestas

  • de donde sale Var.wsAcc ? porque se supoe que deberias definir la instancia dentro del using

             DataSet ds = new DataSet();
            try
            {
    
               using(var svc = new serviceNamespace.serviceClass())
               {
                   svc.Credentials = new NetworkCredential(s_Usu, s_Cla, Var.s_glb_dominio);
    
                   ds = svc.GetSec_groupings(Var.s_glb_sistema, "", s_Usu, s_Usu);
    
               }
    
            }


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de noviembre de 2017 17:09

Todas las respuestas

  • hola

    Pero desde el cliente como envias las credencias cuando invocas el servicio web ?

    si se trata de un servicio asmx y en el cliente has creado la web reference, o sea tienes el proxy en codigo para invocar el servicio, puedes pasar credenciales

    HOW TO: Pass Current Credentials to an ASP.NET Web Service

    como veras asigna la propiedad "Credentials", quizas en tu caso debas asignar una NetworkCredential

    ws.Credentials = new NetworkCredential(username, password, domain);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 15 de noviembre de 2017 16:34
  • Sí, tengo las webreferences. Y también utilizo las credenciales que indicas

    Este es mi código:

      public void CargaPerfil(string s_Usu, string s_Cla)
        {
            string s_Cod_Per = "", s_Nom_Per = "";
            Var.wsAcc.Credentials = new NetworkCredential(s_Usu, s_Cla, Var.s_glb_dominio);
            DataSet ds = new DataSet();
            try
            {
                ds = Var.wsAcc.GetSec_groupings(Var.s_glb_sistema, "", s_Usu, s_Usu);
            }
            catch (Exception ex)
            {
                lblMen.Text = "Error: No carga el Rol del usuario  " + ex.ToString().Trim();
            }
            finally
            {
                if (ds.Tables.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        DataRow dtr = ds.Tables[0].Rows[i];
                        s_Cod_Per = dtr["group_name"].ToString().Trim();
                        s_Nom_Per = dtr["description"].ToString().Trim();
                    }
                }

        }
        }

    miércoles, 15 de noviembre de 2017 16:38
  • de donde sale Var.wsAcc ? porque se supoe que deberias definir la instancia dentro del using

             DataSet ds = new DataSet();
            try
            {
    
               using(var svc = new serviceNamespace.serviceClass())
               {
                   svc.Credentials = new NetworkCredential(s_Usu, s_Cla, Var.s_glb_dominio);
    
                   ds = svc.GetSec_groupings(Var.s_glb_sistema, "", s_Usu, s_Usu);
    
               }
    
            }


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de noviembre de 2017 17:09
  • lo tengo declarado dentro de var.cs

     public static wsAccesosRRHH.wsAccesosRRHH wsAcc = new wsAccesosRRHH.wsAccesosRRHH();

    miércoles, 15 de noviembre de 2017 17:18
  • Tendrá que ver que el servidor de SQL está en una pc diferente del IIS?

    se tendrá que hacer alguna configuración adicional?

    jueves, 16 de noviembre de 2017 16:29