Como formato a mensagem usada para realizar uma postagem HTTP de VBScript/ASP para um serviço WCF e obter uma resposta?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

FAZER O POST NÃO É O PROBLEMA!Formatar a mensagem para obter uma resposta é o problema.

Idealmente, eu seria capaz de construir uma mensagem e usar o WinHTTP para realizar uma postagem em um serviço WCF (hospedado no IIS) e obter uma resposta, mas até agora não consegui construir algo que funcione corretamente.

Alguém tem um exemplo simples de como fazer isso?

No mundo do Web Service 2.0, isso era tão fácil quanto colocar uma configuração no web.config para fazer com que o serviço respondesse a uma postagem e então chamar o método web apropriado com os parâmetros corretos.Parece não haver análogo para isso no mundo WCF.

No momento, não há opção de converter o consumidor (o final do vbscript) em .NET.

Suponha que neste ponto eu possa converter para o uso de quaisquer ligações disponíveis até o que for suportado no .NET 3.5, mas ao mesmo tempo, se isso puder ser feito usando WsHttpBinding ou BasicHttpBinding, a resposta adequada para isso seria para descrever como formatar a mensagem para qualquer uma dessas ligações no contexto do VBScript ou se não houver como fazer isso, basta dizer que você não pode fazer isso.Se isso puder ser feito usando WebHTTPBinding, não encontrei uma maneira de fazer isso acontecer, pois já investiguei o atributo WebInvoke e não consegui criar um teste de VBScript para WCF que funcionasse corretamente.

Suponha que o tipo de dados postado seja uma string e a resposta também seja uma string.

Além disso, esta questão não está relacionada ao WinHTTP.Já sei como realizar o post usando WinHTTP é a construção da mensagem que o serviço WCF irá responder que é o problema.

Embora eu pudesse usar algo diferente do WinHTTP para executar a postagem do ASP para o serviço WCF, como XMLHTTP, ainda tenho o problema de construir uma mensagem XML à qual o serviço WCF responderá.Eu tentei variações disso e ainda não consigo entender que tipo de formato preciso usar para que isso aconteça.

Eu sei, teoricamente, que tudo o que o serviço WCF precisa é de uma mensagem formatada corretamente.Simplesmente não consigo construir a mensagem corretamente e, normalmente, embora todos tenham alguma sugestão sobre como enviar a mensagem, ainda não vi alguém dar um exemplo real de qual seria o formato adequado da mensagem nesta situação, já que todos estão tão acostumados a usando o .NET para enviar a mensagem e tudo será feito para você nesse contexto.

Foi útil?

Solução

Você não especifica uma coisa:Como você está expondo seu serviço?Se você estiver usando WsHttpBinding ou BasicHttpBinding, não há uma simples "postagem http" que você possa fazer, porque você precisa incluir pelo menos todo o envelope SOAP (com a versão correta do SOAP e potencialmente cabeçalhos de segurança e assim por diante).

Se você estiver usando (ou puder migrar para) o .NET 3.5, haverá uma nova ligação criada explicitamente para oferecer suporte a cenários como este, em que você deseja que seu serviço seja exposto não como um serviço SOAP, mas como um serviço totalmente semelhante ao REST, ou simplesmente como XML/JSON sobre HTTP.É chamado de WebHttpBinding.

Existem muitas opções que você pode ajustar, mas é muito provável que você consiga adicionar um novo endpoint com webHttpBinding e fazer com que ele funcione quase imediatamente.

Isso pode lhe dar uma vantagem inicial no novo modelo de programação: http://msdn.microsoft.com/en-us/library/bb412169.aspx

Outras dicas

Escrevi um código há algum tempo para uma macro do Excel que lê um arquivo XML, publica o conteúdo em uma URL e salva o 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 é o código mais simples que tenho para fazer uma postagem HTTP em segundo plano em 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

Isto requer apenas que você tenha os objetos MSXML instalados em seu servidor.Eu uso isso para todos os tipos de coisas, incluindo um servidor/cliente XML-RPC em ASP.

editar:Releia sua pergunta e se você estiver definido dessa maneira específica, isso não ajudará, mas se você estiver realmente apenas procurando uma maneira de acessar seu serviço da web, isso funcionaria, desde que você construa seu XML para postar corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top