私は、WCFサービスは、宣言しているん:WCFポスト/ WebRequestクラスワークス - 次のようにWebクライアントではない
[OperationContract, XmlSerializerFormat]
[WebInvoke(UriTemplate = "ProessUpload",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml)]
void ProcessUpload(ProductConfig stream);
私は、Webクライアントを使用してこのサービスを呼び出すためにしようとしていますが、私はいつも、応答400(BadRequest)を取得していますから、サーバー。しかし、私がHttpWebRequestを使用する場合、WCFは私の投稿を消費し、正しく200で応答します。また、WCFサービスを呼び出すためにFiddlerを使用してリクエストを構築することもできます。
Webクライアントコード
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/xml");//; charset=utf-8
try
{
string result = webClient.UploadString("http://jeff-laptop/SalesAssist.ImageService/Process", "POST", data2);
}
catch (Exception ex)
{
var e = ex.InnerException;
}
HttpWebRequestのコード
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://jeff-laptop/SalesAssist.ImageService/Process");
request.ContentType = "application/xml";
request.Method = "POST";
request.KeepAlive = true;
using (Stream requestStream = request.GetRequestStream())
{
var bytes = Encoding.UTF8.GetBytes(data2);
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
}
var response = (HttpWebResponse)request.GetResponse();
var abc = new StreamReader(response.GetResponseStream()).ReadToEnd();
var data2 = @"<Product><Sku>3327</Sku><NameProduct</Name><Category>Bumper</Category><Brand Id='3'><Collection>14</Collection></Brand></Product>";
を送られているXMLはなぜHttpWebRequestの作品やWebクライアントにはないということですか?フィドラーを介して送信されたヘッダーに実際の違いはありません。
要素の文字列に特殊文字が降りてくると思います。製品名に「Comfort®」を渡すと、HttpWebRequestを使用して動作しますが、WebClientでは動作しません。 WebClientは送信前にエンコードを実行しますか? –
私は別の種類の問題を抱えていましたが、この質問は自分のコードを修正する機会を与えました。 –