HTTP ポストを使用して URL に送信するために、C# .NET で SOAP メッセージ (ヘッダーを含む) を作成しようとしています。送信先の URL は Web サービスではなく、SOAP メッセージを受信して最終的にそこから情報を抽出するだけです。これを行う方法についてのアイデアはありますか?
9336 次
2 に答える
15
まず、有効な XML を作成する必要があります。次のように、Linq to XML を使用してこれを実現します。
XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
var document = new XDocument(
new XDeclaration("1.0", "utf-8", String.Empty),
new XElement(soapenv + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", soapenv),
new XElement(soapenv + "Header",
new XElement(soapenv + "AnyOptionalHeader",
new XAttribute("AnyOptionalAttribute", "false"),
)
),
new XElement(soapenv + "Body",
new XElement(soapenv + "MyMethodName",
new XAttribute("AnyAttributeOrElement", "Whatever")
)
)
);
それから私はそれを使用して送信します(編集:ここに追加さXDocument.ToString()
れました。)
var req = WebRequest.Create(uri);
req.Timeout = 300000; //timeout
req.Method = "POST";
req.ContentType = "text/xml;charset=UTF-8";
using (var writer = new StreamWriter(req.GetRequestStream()))
{
writer.WriteLine(document.ToString());
writer.Close();
}
応答を読む必要がある場合は、そうします (これは上記のコードのフォローアップです)。
using (var rsp = req.GetResponse())
{
req.GetRequestStream().Close();
if (rsp != null)
{
using (var answerReader =
new StreamReader(rsp.GetResponseStream()))
{
var readString = answerReader.ReadToEnd();
//do whatever you want with it
}
}
}
于 2009-11-25T18:41:36.670 に答える
0
上記のコードには括弧がなく、余分なコンマがありました。ここで修正しました:
XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
var document = new XDocument(
new XDeclaration("1.0", "utf-8", String.Empty),
new XElement(soapenv + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", soapenv),
new XElement(soapenv + "Header",
new XElement(soapenv + "AnyOptionalHeader",
new XAttribute("AnyOptionalAttribute", "false")
)
),
new XElement(soapenv + "Body",
new XElement(soapenv + "MyMethodName",
new XAttribute("AnyAttributeOrElement", "Whatever")
)
)
)
);
于 2012-04-10T14:32:54.323 に答える