Comment formater le message utilisé pour effectuer une publication HTTP de VBScript / ASP vers un service WCF et obtenir une réponse?

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

  •  09-06-2019
  •  | 
  •  

Question

FAIRE LA POSTE N'EST PAS LE PROBLÈME! Formater le message de manière à obtenir une réponse est le problème.

Idéalement, je serais capable de construire un message et d’utiliser WinHTTP pour publier un message sur un service WCF (hébergé dans IIS) et obtenir une réponse, mais j’ai été incapable de construire quelque chose qui fonctionne correctement.

Quelqu'un at-il un exemple de ce type qui soit simple?

Dans le monde des services Web 2.0, il était aussi simple de définir un paramètre dans le fichier web.config pour que le service réponde à une publication, puis d’appeler la méthode Web appropriée avec les paramètres appropriés. Il ne semble y avoir aucun analogue pour cela dans le monde de la WCF.

Pour l'instant, il n'y a pas d'option pour convertir le consommateur (la fin de vbscript) en .NET.

Supposons à ce stade que je puisse convertir à l’aide de toutes les liaisons disponibles jusqu’à la version prise en charge par .NET 3.5, mais si cela peut être fait avec WsHttpBinding ou BasicHttpBinding, la réponse appropriée il s'agirait de décrire comment formater le message pour l'une ou l'autre de ces liaisons dans le contexte de VBScript ou, s'il n'y a aucun moyen de le faire, dites simplement que vous ne pouvez pas le faire. Si cela peut être fait à l'aide de WebHTTPBinding, je n'ai pas trouvé le moyen de le concrétiser, car j'ai déjà examiné l'attribut WebInvoke et je suis incapable de créer un test de VBScript vers WCF qui fonctionne correctement.

Supposons que le type de données publié est une chaîne et que la réponse est également une chaîne.

De plus, cette question n’est pas liée à WinHTTP. Je sais déjà comment utiliser le message avec WinHTTP, c’est la construction du message que le service WCF répondra, c’est le problème.

Bien que je puisse utiliser quelque chose d’autre que WinHTTP pour effectuer la publication d’ASP sur le service WCF tel que XMLHTTP, je rencontre toujours le problème de la construction d’un message XML auquel le service WCF répondra. J'ai essayé différentes variantes et je n'arrive toujours pas à imaginer le format que je dois utiliser pour que cela se produise.

Je sais théoriquement que tous les besoins du service WCF sont un message correctement formaté. Je ne parviens tout simplement pas à construire le message correctement et généralement, alors que tout le monde a une suggestion sur la manière d'envoyer le message, je n'ai pas encore vu quelqu'un donner un exemple concret du format de message approprié dans cette situation, car tout le monde est tellement habitué. utiliser .NET pour envoyer le message et tout est fait pour vous dans ce contexte.

Était-ce utile?

La solution

Vous ne spécifiez pas une chose: en quelle liaison exposez-vous votre service? Si vous utilisez WsHttpBinding ou BasicHttpBinding, il n'y a pas de simple "http post". vous pouvez le faire, car vous devez au moins inclure toute l’enveloppe SOAP (avec la bonne version SOAP et éventuellement des en-têtes de sécurité, etc.).

Si vous utilisez (ou pouvez migrer vers .NET 3.5), une nouvelle liaison est explicitement créée pour prendre en charge des scénarios tels que celui-ci, dans laquelle vous souhaitez que votre service soit exposé non pas en tant que service SOAP, mais entièrement de type REST. service, ou simplement en tant que XML / JSON sur HTTP. C'est ce qu'on appelle la WebHttpBinding.

Il existe de nombreuses options que vous pouvez modifier, mais il est très probable que vous puissiez simplement ajouter un nouveau point de terminaison avec webHttpBinding et le faire fonctionner presque immédiatement.

Cela pourrait vous donner une longueur d’avance sur le nouveau modèle de programmation: http : //msdn.microsoft.com/en-us/library/bb412169.aspx

Autres conseils

Il y a quelque temps, j'ai écrit du code dans une macro Excel qui lit un fichier XML, en publie le contenu dans une URL, puis enregistre le résultat.

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

Ceci est le code le plus simple que j'ai pour créer une publication HTTP en arrière-plan dans 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

Cela nécessite simplement que les objets MSXML soient installés sur votre serveur. J'utilise ceci pour toutes sortes de choses, y compris un serveur / client XML-RPC en ASP.

modifier: relisez votre question et si vous êtes défini de manière spécifique, cela ne vous aidera pas, mais si vous cherchez simplement un moyen d'accéder à votre service Web, cela fonctionnera tant que vous construirez votre code XML. poster correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top