Web サービスから奇妙な応答が返されます。
<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>
<GetLemonadeResponse xmlns="http://microsoft.com/webservices/">
<GetLemonadeResult><Response><Status>Error</Status><Message>Could not find the Lemonade for this State/Lemon</Message><FileNumber /></Response></GetLemonadeResult>
</GetLemonadeResponse>
</soap:Body>
</soap:Envelope>
2 つの質問:
1) GetLemonadeResult のコンテンツに逸脱したコンテンツ (「& lt ;」など) が含まれている理由がわかりません。
この方法でバイトを文字列に移行します。
WebClientEx client = new WebClientEx();
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml; charset=utf-8");
client.Encoding = Encoding.UTF8;
byte[] result = client.UploadData(_baseUri.ToString(), data);
client.Encoding.GetBytes(xml));
string resultString = client.Encoding.GetString(result);
(WebClientEx は、追加の Timeout プロパティを使用して WebClient から派生します)。
間違ったエンコーディングを選択すると、応答の外側の部分が同じように壊れてしまうと考えています。
Web サービスにエラーはありますか?
2) Linq to XML を使用して "GetLemonadeResult" を取得しようとすると、何も取得できないのはなぜですか?
var xdoc = XDocument.Parse(response); // returns the XML posted above
var responseAsXML = xdoc.Descendants("GetLemonadeResult"); // gets nothing
XML の GetLemonadeResult タグには "tag:" が付加されていないため、子孫をキャッチするために名前空間が必要になるとは思いもしませんでした。