Как мне отформатировать сообщение, используемое для выполнения HTTP post из VBScript / ASP в службу WCF, и получить ответ?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

СДЕЛАТЬ ПОСТ - ЭТО НЕ ПРОБЛЕМА!Проблема в форматировании сообщения так, чтобы я получил ответ.

В идеале я мог бы создать сообщение и использовать WinHTTP для отправки post в службу WCF (размещенную в IIS) и получения ответа, но пока мне не удалось создать что-то, что работает должным образом.

У кого-нибудь есть простой пример того, как это сделать?

В мире веб-сервисов 2.0 это было так же просто, как ввести параметр в web.config, чтобы заставить службу отвечать на сообщение, а затем вызвать соответствующий веб-метод с нужными параметрами.Похоже, в мире WCF для этого нет аналога.

На данный момент у меня нет возможности преобразовать consumer (конец vbscript) в .NET.

Предположим на этом этапе, что в конечной точке я могу преобразовать, используя любые доступные привязки вплоть до того, что поддерживается в .NET 3.5, но в то же время, если это можно сделать с помощью wsHttpBinding или BasicHttpBinding, то правильным ответом на это было бы описать, как отформатировать сообщение для любой из этих привязок в контексте VBScript, или, если нет способа сделать это, просто скажите, что вы не можете этого сделать.Если это можно сделать с помощью webHttpBinding, то я не нашел способа сделать это, поскольку я уже исследовал атрибут WebInvoke и не смог создать тест из VBScript в WCF, который работал должным образом.

Предположим, что отправленный тип данных является строкой, и ответ также является строкой.

Также этот вопрос не связан с WinHTTP.Я уже знаю, как выполнить публикацию с помощью WinHTTP, проблема заключается в создании сообщения, на которое ответит служба WCF.

Хотя я мог бы использовать что-то другое, кроме WinHTTP, для выполнения post из ASP в службу WCF, такую как XMLHTTP, у меня все еще есть проблема создания XML-сообщения, на которое будет отвечать служба WCF.Я пробовал варианты этого и до сих пор не могу понять, какой формат мне нужно использовать, чтобы это произошло.

Теоретически я знаю, что все, что нужно службе WCF, - это правильно отформатированное сообщение.Я просто не могу правильно составить сообщение, и обычно, хотя у всех есть какие-то предложения о том, как отправить сообщение, я еще не видел, чтобы кто-нибудь приводил реальный пример того, каким был бы правильный формат сообщения в этой ситуации, поскольку все так привыкли его использовать.Используйте сеть, чтобы отправить сообщение, и все это будет сделано за вас в этом контексте.

Это было полезно?

Решение

Вы не уточняете одну вещь:В качестве какой привязки вы выставляете свой сервис?Если вы используете wsHttpBinding или BasicHttpBinding, то вы не можете сделать простой "http post", потому что вам нужно включить, по крайней мере, всю оболочку SOAP (с правильной версией SOAP и, возможно, заголовками безопасности и так далее).

Если вы используете (или можете перейти на) .NET 3.5, то существует новая привязка, явно созданная для поддержки подобных сценариев, в которых вы хотите, чтобы ваш сервис предоставлялся не как SOAP-сервис, а как полностью REST-подобный сервис или просто как XML / JSON через HTTP.Это называется webHttpBinding.

Есть много опций, которые вы можете настроить, но очень вероятно, что вы могли бы просто добавить новую конечную точку с помощью webHttpBinding и заставить ее работать почти сразу.

Это может дать вам преимущество в освоении новой модели программирования: http://msdn.microsoft.com/en-us/library/bb412169.aspx

Другие советы

Некоторое время назад я написал некоторый код для макроса Excel, который считывает XML-файл, отправляет содержимое по URL-адресу, а затем сохраняет результат.

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

Это самый простой код, который у меня есть для выполнения фоновой HTTP-публикации в 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

Для этого просто требуется, чтобы у вас были установлены объекты MSXML на вашем сервере.Я использую это для всех видов вещей, включая XML-RPC-сервер / клиент в ASP.

Редактировать:Перечитайте свой вопрос, и если вы настроены на этот конкретный способ, то это не поможет, но если вы действительно просто ищете способ доступа к своему веб-сервису, это будет работать до тех пор, пока вы создаете свой XML для правильной публикации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top