Come formatto il messaggio utilizzato per eseguire un post HTTP da VBScript/ASP a un servizio WCF e ottenere una risposta?

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

  •  09-06-2019
  •  | 
  •  

Domanda

FARE IL POST NON E' IL PROBLEMA!Il problema è formattare il messaggio in modo da ricevere una risposta.

Idealmente sarei in grado di costruire un messaggio e utilizzare WinHTTP per eseguire un post su un servizio WCF (ospitato in IIS) e ottenere una risposta, ma finora non sono stato in grado di costruire qualcosa che funzioni correttamente.

Qualcuno ha un esempio di come farlo che sia semplice?

Nel mondo dei servizi Web 2.0 questo era facile come inserire un'impostazione in web.config per far sì che il servizio rispondesse a un post e quindi chiamare il metodo web appropriato con i parametri corretti.Sembra che non ci sia alcun analogo nel mondo della WCF.

Al momento non ho alcuna possibilità di convertire il consumer (la fine vbscript) in .NET.

Supponiamo a questo punto che all'endpoint posso convertirmi all'utilizzo di qualsiasi associazione disponibile fino a tutto ciò che è supportato in .NET 3.5, ma allo stesso tempo se ciò può essere fatto utilizzando WsHttpBinding o BasicHttpBinding, la risposta corretta a questa sarebbe per descrivere come formattare il messaggio per una di queste associazioni nel contesto di VBScript o se non c'è modo di farlo, dì semplicemente che non puoi farlo.Se questo può essere fatto utilizzando WebHTTPBinding, non ho trovato un modo per realizzarlo poiché ho già esaminato l'attributo WebInvoke e non sono riuscito a creare un test da VBScript a WCF che funzionasse correttamente.

Supponiamo che il tipo di dati pubblicato sia una stringa e che anche la risposta sia una stringa.

Anche questa domanda non è correlata a WinHTTP.So già come eseguire il post utilizzando WinHTTP, è la costruzione del messaggio a cui il servizio WCF risponderà, questo è il problema.

Anche se potrei usare qualcosa di diverso da WinHTTP per eseguire il post da ASP al servizio WCF come XMLHTTP, ho ancora il problema di costruire un messaggio XML a cui risponderà il servizio WCF.Ho provato variazioni su questo e ancora non riesco a capire quale tipo di formato devo utilizzare per realizzarlo.

In teoria so che tutto ciò di cui il servizio WCF ha bisogno è un messaggio formattato correttamente.Non riesco proprio a costruire il messaggio correttamente e di solito anche se tutti hanno qualche suggerimento su come inviare il messaggio non ho ancora visto qualcuno fornire un esempio reale di quale sarebbe il formato corretto del messaggio in questa situazione dato che tutti sono così abituati a farlo utilizzando .NET per inviare il messaggio ed è tutto fatto per te in quel contesto.

È stato utile?

Soluzione

Non specifichi una cosa:Con quale vincolo esponi il tuo servizio?Se utilizzi WsHttpBinding o BasicHttpBinding, non è possibile eseguire un semplice "post http", poiché è necessario includere almeno l'intera busta SOAP (con la versione SOAP corretta e potenzialmente intestazioni di sicurezza e così via).

Se stai utilizzando (o puoi eseguire la migrazione a) .NET 3.5, è disponibile una nuova associazione creata esplicitamente per supportare scenari come questo, in cui desideri che il tuo servizio venga esposto non come servizio SOAP ma come servizio completamente simile a REST oppure semplicemente come XML/JSON su HTTP.Si chiama WebHttpBinding.

Esistono molte opzioni che puoi modificare, ma è molto probabile che potresti semplicemente essere in grado di aggiungere un nuovo endpoint con webHttpBinding e farlo funzionare quasi immediatamente.

Questo potrebbe darti un vantaggio sul nuovo modello di programmazione: http://msdn.microsoft.com/en-us/library/bb412169.aspx

Altri suggerimenti

Qualche tempo fa ho scritto del codice per una macro Excel che legge un file XML, pubblica il contenuto in un URL e quindi salva il risultato.

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

Questo è il codice più semplice che ho per creare un post HTTP in background in 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

Ciò richiede solo che tu abbia gli oggetti MSXML installati sul tuo server.Lo uso per tutti i tipi di cose, incluso un server/client XML-RPC in ASP.

modificare:Rileggi la tua domanda e se sei impostato su quel modo specifico, questo non ti aiuterà, ma se stai davvero solo cercando un modo per accedere al tuo servizio web, funzionerebbe fintanto che costruisci il tuo XML per pubblicarlo correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top