30

XML ファイルに SOAP 要求があります。リクエストを .net の Web サービスに投稿したい 実装方法は?

4

7 に答える 7

20
var uri = new Uri("http://localhost/SOAP/SOAPSMS.asmx/add");

var req = (HttpWebRequest) WebRequest.CreateDefault(uri); 
req.ContentType = "text/xml; charset=utf-8"; 
req.Method = "POST"; 
req.Accept = "text/xml"; 
req.Headers.Add("SOAPAction", "http://localhost/SOAP/SOAPSMS.asmx/add"); 

var strSoapMessage = @"<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' 
               xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
               xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
  <soap:Body><add xmlns='http://tempuri.org/'><a>23</a><b>5</b></soap:Body>
</soap:Envelope>"; 

using (var stream = new StreamWriter(req.GetRequestStream(), Encoding.UTF8)) 
    stream.Write(strSoapMessage); 
于 2008-11-13T15:12:41.697 に答える
5

私はこのようなことを行い、xmlリクエストを手動で作成してから、webrequestオブジェクトを使用してリクエストを送信しました。

string data = "the xml document to submit";
string url = "the webservice url";
string response = "the response from the server";

// build request objects to pass the data/xml to the server
byte[] buffer = Encoding.ASCII.GetBytes(data);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;
Stream post = request.GetRequestStream();

// post data and close connection
post.Write(buffer, 0, buffer.Length);
post.Close();

// build response object
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responsedata = response.GetResponseStream();
StreamReader responsereader = new StreamReader(responsedata);
response = responsereader.ReadToEnd();

コードの先頭にある文字列変数は設定したものであり、サーバーから文字列応答(できれば...)を受け取ります。

于 2008-11-13T15:18:11.797 に答える
3

これは通常の方法ではありません。通常は、WCFまたは古いスタイルのWebサービス参照を使用して、プロキシクライアントを生成します。

ただし、通常は、HttpWebRequestを使用してURLに接続し、リクエストの本文でXMLを送信する必要があります。

于 2008-11-13T14:56:57.517 に答える
2

XMLはどのように生成され、有効なSOAPメッセージですか?上記の人々によって提案されたように、HTTP経由で投稿することができます。

それが機能するかどうかをテストしたい場合は、SoapUIを試してみることができます(つまり、テスト用です)。

于 2008-11-13T15:05:40.543 に答える
2

別の例を次に示します。これは VB での例です。

    Dim manualWebClient As New System.Net.WebClient()

    manualWebClient.Headers.Add("Content-Type", "application/soap+xml;  charset=utf-8")

    ' Note: don't put the <?xml... tag in--otherwise it will blow up with a 500 internal error message!
    Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes( _
        "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" & System.Environment.NewLine & _
        "  <soap12:Body>" & System.Environment.NewLine & _
        "    <Multiply xmlns=""http://cptr446.class/"">" & System.Environment.NewLine & _
        "      <x>5</x>" & System.Environment.NewLine & _
        "      <y>4</y>" & System.Environment.NewLine & _
        "    </Multiply>" & System.Environment.NewLine & _
        "  </soap12:Body>" & System.Environment.NewLine & _
        "</soap12:Envelope>")
    Dim bytRetData As Byte() = manualWebClient.UploadData("http://localhost/CPTR446.asmx", "POST", bytArguments)

    MessageBox.Show(System.Text.Encoding.ASCII.GetString(bytRetData))
于 2009-01-14T04:32:08.443 に答える
1

古いスレッドにぶつかって申し訳ありません。これに対する私の解決策は次のとおりです

''' <summary>
''' Sends SOAP to a web service and sends back the XML it got back.
''' </summary>
Public Class SoapDispenser
    Public Shared Function CallWebService(ByVal WebserviceURL As String, ByVal SOAP As String) As XmlDocument
        Using wc As New WebClient()
            Dim retXMLDoc As New XmlDocument()

            wc.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8")
            retXMLDoc.LoadXml(wc.UploadString(WebserviceURL, SOAP))

            Return retXMLDoc
        End Using
    End Function
End Class
于 2011-02-25T09:44:23.600 に答える
0

HTTP 経由でデータを送信する必要があります。WebRequest クラスを使用してデータを投稿します。有効な SOAP エンベロープがあることを確認するために、ポスト リクエストで他のデータを送信する必要があります。詳細については、SOAP 仕様を参照してください。

于 2008-11-13T14:53:50.910 に答える