¿Cómo formato el mensaje utilizado para realizar una publicación HTTP desde VBScript/ASP a un servicio WCF y obtengo una respuesta?

StackOverflow https://stackoverflow.com/questions/76925

  •  09-06-2019
  •  | 
  •  

Pregunta

¡HACER EL PUBLICACIÓN NO ES EL PROBLEMA!El problema es formatear el mensaje para recibir una respuesta.

Lo ideal sería poder crear un mensaje y usar WinHTTP para realizar una publicación en un servicio WCF (alojado en IIS) y obtener una respuesta, pero hasta ahora no he podido construir algo que funcione correctamente.

¿Alguien tiene un ejemplo sencillo de cómo hacer esto?

En el mundo de los servicios web 2.0, esto era tan fácil como establecer una configuración en web.config para que el servicio respondiera a una publicación y luego llamar al método web apropiado con los parámetros correctos.Parece que no hay análogo para esto en el mundo WCF.

A partir de ahora no tengo ninguna opción para convertir el consumidor (el extremo de vbscript) a .NET.

Supongamos en este punto que en el punto final puedo convertir para usar cualquier enlace que esté disponible hasta lo que sea compatible con .NET 3.5, pero al mismo tiempo, si esto se puede hacer usando WsHttpBinding o BasicHttpBinding, entonces la respuesta adecuada a esto sería para describir cómo formatear el mensaje para cualquiera de esos enlaces en el contexto de VBScript o si no hay forma de hacerlo, simplemente diga, no puede hacerlo.Si esto se puede hacer usando WebHTTPBinding, entonces no he encontrado una manera de hacerlo porque ya investigué el atributo WebInvoke y no pude crear una prueba de VBScript a WCF que funcionara correctamente.

Supongamos que el tipo de datos publicado es una cadena y la respuesta también es una cadena.

Además, esta pregunta no está relacionada con WinHTTP.Ya sé cómo realizar la publicación usando WinHTTP, el problema es la construcción del mensaje al que responderá el servicio WCF.

Si bien podría usar algo que no sea WinHTTP para realizar la publicación desde ASP al servicio WCF, como XMLHTTP, todavía tengo el problema de construir un mensaje XML al que responderá el servicio WCF.Probé variaciones de esto y todavía no puedo entender qué tipo de formato necesito usar para que esto suceda.

En teoría, sé que todo lo que necesita el servicio WCF es un mensaje con el formato adecuado.Simplemente no puedo construir el mensaje correctamente y, por lo general, aunque todos tienen alguna sugerencia sobre cómo enviar el mensaje, todavía tengo que ver a alguien dar un ejemplo real de cuál sería el formato de mensaje adecuado en esta situación, ya que todos están muy acostumbrados. usando .NET para enviar el mensaje y todo estará hecho por usted en ese contexto.

¿Fue útil?

Solución

No especificas una cosa:¿A qué vinculación expone su servicio?Si está utilizando WsHttpBinding o BasicHttpBinding, entonces no hay una simple "publicación http" que pueda hacer, porque necesita incluir al menos todo el sobre SOAP (con la versión SOAP correcta y potencialmente encabezados de seguridad, etc.).

Si está utilizando (o puede migrar a) .NET 3.5, entonces hay un nuevo enlace creado explícitamente para admitir escenarios como este, donde desea que su servicio se exponga no como un servicio SOAP sino como un servicio completamente similar a REST, o simplemente como XML/JSON sobre HTTP.Se llama WebHttpBinding.

Hay muchas opciones que puede modificar, pero es muy probable que pueda agregar un nuevo punto final con webHttpBinding y que funcione casi de inmediato.

Esto podría darle una ventaja sobre el nuevo modelo de programación: http://msdn.microsoft.com/en-us/library/bb412169.aspx

Otros consejos

Hace un tiempo escribí un código para una macro de Excel que lee un archivo XML, publica el contenido en una URL y luego guarda el resultado.

Sub ExportToHTTPPOST()
Dim sURL, sExtraParams
Const ForReading = 1, ForWriting = 2, ForAppending = 3

Set rs = CreateObject("Scripting.FileSystemObject")
Set r = rs.OpenTextFile("y:\test.xml", ForReading)

Set Ws = CreateObject("Scripting.FileSystemObject")
Set w = Ws.OpenTextFile("Y:\test2.xml", ForWriting, True)

Do Until r.AtEndOfStream

    sData = sData & r.readline

Loop

sURL = "http://MyServer/MyWebApp.asp"

sData = "payload=" & sData

    Set objHTTP = New WinHttp.WinHttpRequest

            objHTTP.Open "POST", sURL, False
            objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            objHTTP.send sData
            w.writeline objHTTP.ResponseText
    Set objHTTP = Nothing
    w.Close
    r.Close
End Sub

Este es el código más simple que tengo para hacer una publicación HTTP en segundo plano en ASP.

Set objXML = CreateObject("MSXML2.ServerXMLHTTP.6.0")
objXML.open "POST", url, false
objXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXML.send("key="& Server.URLEncode(xmlvalue))
Set responseXML = objXML.responseXML
Set objXML = nothing

Esto sólo requiere que tengas los objetos MSXML instalados en tu servidor.Lo uso para todo tipo de cosas, incluido un servidor/cliente XML-RPC en ASP.

editar:Vuelva a leer su pregunta y, si está configurado de esa manera específica, esto no ayudará, pero si realmente solo está buscando una manera de acceder a su servicio web, esto funcionará siempre que construya su XML para publicar correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top