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

ДЕЛАТЬ ПОЧТУ НЕ ПРОБЛЕМА! Форматирование сообщения, чтобы я получил ответ, является проблемой.

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 17 сентября 2008

Вы не указываете одну вещь: Какую привязку вы выставляете для своей услуги? Если вы используете WsHttpBinding или BasicHttpBinding, то вы не сможете сделать простой «пост http», потому что вам нужно как минимум включить весь конверт SOAP (с правильной версией SOAP и, возможно, заголовками безопасности и т. Д.). 1001 *

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

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

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

0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

Некоторое время назад я написал некоторый код для макроса 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
...