c#
  • .net
  • soap
  • 2012-05-09 42 views 9 likes 
    9

    Necesito enviar una solicitud SOAP a una URL. Pero encuentro esto más difícil de lo que pensé que sería.¿Enviar una solicitud SOAP, por dónde empezar?

    La solicitud que tengo que enviar es:

    string bla = "" + 
    "<?xml version='\"1.0\" encoding=\"UTF-8\"?>" + 
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
         "<soap:Body>" + 
          "<ns1:sendNotificationResponse" + 
           "xmlns=\"http://notification.services.adyen.com\"" + 
           "xmlns:ns2=\"http://common.services.adyen.com\">" + 
          "<notificationResponse>[accepted]</notificationResponse>" + 
          "</sendNotificationResponse>" + 
         "</soap:Body>" + 
        "</soap:Envelope>"; 
    

    Me han dado una dirección URL: https://ca-test.adyen.com/ca/services/Notification?wsdl

    El problema es, es que no estoy seguro de cómo ir desde aquí . ¿Puedo simplemente enviar una solicitud a esa URL? ¿O debo importar el WSDL de alguna manera primero?

    He encontrado muchos ejemplos en la red, pero realmente no podía entender la mayoría de ellos. Algunos incluso estaban desactualizados, porque todavía estaban usando: Microsoft.Web.Services3

    Así que, en resumen, no tengo ni idea de lo que tengo que hacer exactamente aquí y cómo. Simplemente quiero enviar ese mensaje 'SOAP' ...

    +3

    ¿Ha intentado agregar 'Referencia de servicio' o' Referencia web' en su VS? –

    +0

    Pruebe este enlace sobre cómo crear o consumir un servicio web: http://www.kevingao.net/wcf-java-interop/wcf-client-and-wcf-service.html –

    +0

    @LB No, esto es todo realmente nuevo para mí Veo "Agregar referencia de servicio" pero no "Agregar referencia web". Primero trataré de agregar la "Referencia de servicio". – Vivendi

    Respuesta

    4

    Puede hacer esto agregando una referencia de servicio a la URL de punto final que ha proporcionado en la pregunta. Luego puede llamar al método web como llamaría a un método normal, justo al lado del objeto cliente. Paso a paso a continuación:

    1. Haga clic con referencias, seleccione Agregar referencia de servicio
    2. Introducir URL para agregar referencia de servicio
    3. En el código instanciar nuevo cliente y utilizar de la siguiente manera:
    ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient(); 
    client.sendNotification(...); 
    

    Editar

    Al mirar el servicio web con más detalle, parece que la solicitud SOAP que ha incluido en la pregunta es la respuesta que la URL devolvería cuando invocó el método, no la solicitud que enviaría a el servicio web para invocar el método.

    3

    ¿No sería más fácil agregar una referencia de servicio web en Visual Studio? Lo que obtienes son clases "auxiliares" que te permiten comunicarte con el servicio web utilizando clases y métodos normales; no es necesario que te preocupes por los mensajes SOAP que se envían o por otros motivos.

    Para agregar una referencia de este tipo, puede seleccionar la opción de menú contextual "Agregar referencia de servicio". Dependiendo del tipo de servicio, tendrá que presionar el botón en la parte inferior izquierda del cuadro de diálogo de referencia del servicio (en alemán se llama "Erweitert", que se traduciría en "Mejorado" o "Extendido"). El siguiente diálogo también tiene un botón en la parte inferior izquierda de la sección "Compatibilidad" para agregar una "referencia de servicio web de estilo .NET 2.0".

    Uno de los dos debería ayudarlo.

    Si necesita enviar la solicitud manualmente, debe enviar una solicitud POST a la URL del servicio web agregando el código XML como el cuerpo de las solicitudes.

    +0

    Agregué el WSDL como referencia. Me mostró en el diálogo que tengo una función 'sendNotification'. Supongo que eso es lo que necesito. Ahora tengo "ServiceReference1" en "Referencias de servicio". Supongo que está bien, ¿verdad? --- Lo siguiente que tengo que hacer es usarlo. ¿Alguna idea de cómo puedo hacer eso? --- ServiceReference1 service = new ServiceReference1(); --- No hace el truco. – Vivendi

    +0

    Ahora debería haber un espacio de nombres 'ServiceReference1'. Por lo tanto, si ingresa 'ServiceReference1' y espera a que aparezca la ventana emergente de finalización del código, verá algunas clases. El que necesita debe terminar con "Cliente". Por ejemplo, "Service1Client". –

    +0

    Como Richard descubrió, la línea debería ser 'ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient()' –

    0

    En cuanto a "cómo enviar mensajes de jabón": Depende de los utilizados procotol (http, jms, incluso smtp), los mensajes de SOAP pueden enviarse incluso desde la línea de comando, a través de telnet, curl, etc.

    Con respecto a su pregunta: Perdón por la respuesta genérica, pero depende del ws-framework utilizado.

    Respecto al WSDL: El WSDL actúa como el contrato/base para la implementación, por lo que en su caso (suponiendo que su mensaje SOAP ya es válido de acuerdo con el esquema en el WSDL) el uso explícito del WSDL no es realmente necesario.

    Cuestiones relacionadas