none
Error CS 1503 Web Service RRS feed

  • Pregunta

  • Hi, how are you first of all thanks for taking the time to read my question

    I am facing a small problem which is to consume a web Service I have a small documentation on how to do it but when I follow it I find the following error 

    Error CS1503 Argumento 1: no se puede convertir de 'System.Net.NetworkCredential' a 'Web_Service_Do_Brasil.WS.NetworkCredential

    This is my code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using System.Configuration;
    using System.Net.Http;
    
    namespace Web_Service_Do_Brasil
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                ObtenerMovimientos();
            }
    
    
    
            private static void ObtenerMovimientos()
            {
                using (var PBAService = new WS.Interface())
                {
                    NetworkCredential PBACredential = new NetworkCredential();
                    PBACredential.UserName = System.Configuration.ConfigurationManager.AppSettings["User"];
                    PBACredential.Password = System.Configuration.ConfigurationManager.AppSettings["PassWord"];
    
                    
    
    
                    var PBAResult = PBAService.GetMovimentacao(PBACredential); // Here i have a Error
    
    
                }
            }
    
    
    
        }
    }
    

    I hope you can guide me

    Thank you very much for your attention and time

    sábado, 6 de febrero de 2021 4:15

Respuestas

  • Hi, I am going to reply in Spanish because you posted your question in the Spanish-language forum. The English-language C# forum has been moved to Microsoft Q&A: https://docs.microsoft.com/en-us/answers/topics/dotnet-csharp.html

    La clave del error está aquí:

    "no se puede convertir de 'System.Net.NetworkCredential' a 'Web_Service_Do_Brasil.WS.NetworkCredential"

    Eso te esta indicando que el argumento que espera recibir el método  PBAService.GetMovimentacao no es de tipo System.Net.NetworkCredential, sino que es de otro tipo que también se llama NetworkCredential pero que está definido dentro del webservice.

    Suponiendo que en la definición del webservice sí que hayas declarado la variable con el tipo System.Net.NetworkCredential (de lo contrario no es de extrañar que falle, es un error convertir de un tipo a otro así por las buenas aunque los tipos tengan el mismo nombre), entonces puede ser que se trate de un problema con el generador de proxies, que ha creído que se trataba de un tipo definido por ti. Para arreglarlo, si estás usando un proxy autogenerado, vuélvelo a generar. Primero cerciórate de que tienes en el proyecto referencia necesaria para que reconozca System.Net.NetworkCredential. Y después abre las propiedades avanzadas en la ventanita desde la que añades la referencia web para que genere el proxy, y márcale la casilla que dice algo así como "reutilizar los tipos locales".

    sábado, 6 de febrero de 2021 8:10
    Moderador
  •                 credential.UserName = "******";
                    credential.Password = "******";
    
                    Web_Service_Do_Brasil.WS.Filtro[] PBAFiltro = new WS.Filtro[1];
    
                    WS.Filtro filtro1 = new WS.Filtro();
                    filtro1.Nome = "DTMovimentacao";
                    filtro1.Valor = .....;
                    PBAFiltro[0] = filtro1;
                   
                    var objResult = objservice.GetMovimentacao(credential, PBAFiltro);
    
    

    viernes, 12 de febrero de 2021 8:46
    Moderador

Todas las respuestas

  • Hi, I am going to reply in Spanish because you posted your question in the Spanish-language forum. The English-language C# forum has been moved to Microsoft Q&A: https://docs.microsoft.com/en-us/answers/topics/dotnet-csharp.html

    La clave del error está aquí:

    "no se puede convertir de 'System.Net.NetworkCredential' a 'Web_Service_Do_Brasil.WS.NetworkCredential"

    Eso te esta indicando que el argumento que espera recibir el método  PBAService.GetMovimentacao no es de tipo System.Net.NetworkCredential, sino que es de otro tipo que también se llama NetworkCredential pero que está definido dentro del webservice.

    Suponiendo que en la definición del webservice sí que hayas declarado la variable con el tipo System.Net.NetworkCredential (de lo contrario no es de extrañar que falle, es un error convertir de un tipo a otro así por las buenas aunque los tipos tengan el mismo nombre), entonces puede ser que se trate de un problema con el generador de proxies, que ha creído que se trataba de un tipo definido por ti. Para arreglarlo, si estás usando un proxy autogenerado, vuélvelo a generar. Primero cerciórate de que tienes en el proyecto referencia necesaria para que reconozca System.Net.NetworkCredential. Y después abre las propiedades avanzadas en la ventanita desde la que añades la referencia web para que genere el proxy, y márcale la casilla que dice algo así como "reutilizar los tipos locales".

    sábado, 6 de febrero de 2021 8:10
    Moderador
  • Hola Yael,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 8 de febrero de 2021 14:48
    Moderador
  • Hola que tal buen día antes que nada una disculpa por contestar hasta ahora y muchas gracias por compartir su conocimiento con migo ya que mi fuerte no es trabajar con C# no es mi herramienta de trabajo cotidiana he intentado realizar lo que dices de la siguiente manera:

    ejemplo de donde agrego el Web Service: 

    https://drive.google.com/file/d/1jkfMkIFwZpmKb3tyy1IsIWDoItqfOOgc/view?usp=sharing

    Después di en el botón de avanzadas y marque todas las casillas así: 

    https://drive.google.com/file/d/1FLSSu74m_5g13K4GQSTdM7PIUz7Frmuq/view?usp=sharing

    Pero aun sigue sin funcionar, pido perdón ya que tal vez las preguntas que estoy haciendo son un poco simples pero realmente ignoro como se trabajan  los web service en c#

    De nuevo agradezco mucho su tiempo y quedo al pendiente de cualquiera de sus comentarios 

    Muchas gracias y buen día


    martes, 9 de febrero de 2021 20:25
  • Sí, las opciones están bien, ya que le has dicho que reutilice los ensamblados estándar. Tiene que haber algún problema por otra parte. Convendría examinar la declaración del método en el webservice, a ver si efectivamente el parámetro es de tipo System.Net.NetworkCredential, o si es otro NetworkCredential diferente. Si eso está bien, lo siguiente sería examinar el código autogeneado para el Proxy, y ver cómo ha construido la declaración del método, y en caso de que lo haya declarado con un tipo local, cuál es la definición que ha escrito para ese tipo local. Probablemente sea factible instanciarlo y pasárselo al método en lugar del System.Net.NetworkCredential. Pero para eso hay que examinar el código y ver qué es lo que ha generado. Nota: si no encuentras el fuente del proxy (de forma predeterminada estará en un fichero oculto), puedes hacer click sobre la llamada al método y pulsar la F12 para ir a la definición.
    • Marcado como respuesta EricRRModerator martes, 9 de febrero de 2021 23:43
    • Desmarcado como respuesta EricRRModerator martes, 9 de febrero de 2021 23:43
    • Propuesto como respuesta EricRRModerator martes, 9 de febrero de 2021 23:43
    martes, 9 de febrero de 2021 20:35
    Moderador
  • Muchas gracias por tu tiempo y conocimiento mira presionando f12 me mostro el siguiente código

    https://drive.google.com/file/d/12E2Dptz9A9qiQqPPq6x5ZQMyGVJLwVnO/view?usp=sharing

    Quedo al pendiente de tus comentarios y gracias de nuevo por tus conocimientos.

     
    martes, 9 de febrero de 2021 21:50
  • Sí, tal como se ve en el código capturado, el proxy del servicio te lo ha generado utilizando una clase local que se llama Web_Service_Do_Brasil.WS.NetworkCredential. NO es System.Net.NetworkCredential. Para saber por qué es así y no es otra cosa, habría que examinar el código fuente del servicio. Pero si el servicio no está hecho por ti, sino que únicamente dispones del WSDL para agregar la referencia, entonces hay que asumir que los autores del webservice crearon su propia clase NetworkCredential y que no están usando el NetworkCredential de System.Net.

    Siendo así, tendrás que crear una instancia de la clase Web_Service_Do_Brasil.WS.NetworkCredential, rellenar sus propiedades, y pasar ese objeto en la llamada al webservice. Para ver qué propiedades tiene esta clase, te lo dirá el propio Intellisense de Visual Studio. O bien puedes seguir pulsando F12 sobre ella en el método capturado para ir a su definición.

    miércoles, 10 de febrero de 2021 7:01
    Moderador
  • Hola Alberto lo he hecho de esa manera y en efecto ya no marca error al momento de mandarle el parámetro credencial ahora bien me gustaría saber de que manera puedo asignar los filtros con ayuda de la herramienta SOAP UI realizo un Request de la siguiente manera y me regresa lo que estoy buscando:

    https://drive.google.com/file/d/1TsX48wwRBHjkQTHwpcPHVQW0eH6pqx93/view?usp=sharing

    Como puedo indicarle desde visual studio los parámetros de filtros actualmente mi código se ve de la siguiente manera :

    https://drive.google.com/file/d/1GZwbhpz2Id3ZE8h3_9ndlxFozFJmFRb3/view?usp=sharing

    Enserio agradezco mucho el tiempo que me estas brindado y quedo al pendiente de tus comentarios y conocimientos muchas gracias buen dia



    miércoles, 10 de febrero de 2021 22:37
  • Donde está el comentario de "agregar filtros" tendrás que instanciar un objeto del tipo filtro, cambiarle las propiedades, y asignárselo al elemento [0] del array.

    Si no te sale, pega aquí el código en lugar de la imagen para que se pueda copiar y pegar, y te escribo las líneas sobre tu propio código.

    jueves, 11 de febrero de 2021 12:56
    Moderador
  • Alberto que tal muy buen día gracias por tus conocimientos y por supuesto el tiempo que te tomas en responderme te comparto mi código como lo tengo ahora se mira así:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Web_Service_Do_Brasil
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                LlamarWebService_Click();
            }
    
            public static void LlamarWebService_Click()
            {
                using (var objservice = new WS.InterfaceSoapClient())
                {
                    /* NetworkCredential objcredential = new NetworkCredential();
                     objcredential.UserName = System.Configuration.ConfigurationManager.AppSettings["**********"];
                    objcredential.Password = System.Configuration.ConfigurationManager.AppSettings["******"];
                     var objResult = objservice.GetMovimentacao(null,null);
                    */
    
                    Web_Service_Do_Brasil.WS.NetworkCredential credential = new WS.NetworkCredential();
    
                   // credential.UserName = System.Configuration.ConfigurationManager.AppSettings["******"];
                   //credential.Password = System.Configuration.ConfigurationManager.AppSettings["*******"];
    
                    credential.UserName = "******";
                    credential.Password = "******";
    
                    Web_Service_Do_Brasil.WS.Filtro[] PBAFiltro = new WS.Filtro[1];
    
    /// FILTROS
    /// FILTROS
    /// FILTROS
                   
                    var objResult = objservice.GetMovimentacao(credential, PBAFiltro);
    
                    MessageBox.Show("Termino");
    
    
                }
            }
        }
    }

    De nuevo agradezco tu apoyo y quedo al pendiente de tu respuesta Saludos y buen dia

    jueves, 11 de febrero de 2021 22:43
  •                 credential.UserName = "******";
                    credential.Password = "******";
    
                    Web_Service_Do_Brasil.WS.Filtro[] PBAFiltro = new WS.Filtro[1];
    
                    WS.Filtro filtro1 = new WS.Filtro();
                    filtro1.Nome = "DTMovimentacao";
                    filtro1.Valor = .....;
                    PBAFiltro[0] = filtro1;
                   
                    var objResult = objservice.GetMovimentacao(credential, PBAFiltro);
    
    

    viernes, 12 de febrero de 2021 8:46
    Moderador
  • Muchas gracias por el seguimiento que me brindaste Alberto realmente fue de gran ayuda ya he podido consumir mi web service sin problema Muchas gracias por tu tiempo y conocimiento

    Dios te bendiga buen día
    viernes, 12 de febrero de 2021 20:36