Principales respuestas
Error CS 1503 Web Service

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 meThank you very much for your attention and time
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".
- Propuesto como respuesta Sergio ParraModerator sábado, 6 de febrero de 2021 13:55
- Marcado como respuesta EricRRModerator martes, 9 de febrero de 2021 23:44
-
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);
- Propuesto como respuesta Sergio ParraModerator viernes, 12 de febrero de 2021 10:11
- Marcado como respuesta Yael Suárez Samaniego viernes, 12 de febrero de 2021 20:27
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".
- Propuesto como respuesta Sergio ParraModerator sábado, 6 de febrero de 2021 13:55
- Marcado como respuesta EricRRModerator martes, 9 de febrero de 2021 23:44
-
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.
-
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
- Editado Yael Suárez Samaniego martes, 9 de febrero de 2021 20:26
-
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
-
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.
-
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.
-
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
- Editado Yael Suárez Samaniego miércoles, 10 de febrero de 2021 22:41
-
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.
-
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
-
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);
- Propuesto como respuesta Sergio ParraModerator viernes, 12 de febrero de 2021 10:11
- Marcado como respuesta Yael Suárez Samaniego viernes, 12 de febrero de 2021 20:27
-