WCF Post / WebRequest Works - WebClient没有

时间:2009-03-14 13:19:52

标签: wcf httpwebrequest webclient

我的WCF服务声明如下:

[OperationContract, XmlSerializerFormat]
[WebInvoke(UriTemplate = "ProessUpload",
   BodyStyle = WebMessageBodyStyle.Bare,
   RequestFormat = WebMessageFormat.Xml)]
void ProcessUpload(ProductConfig stream);

我正在尝试使用WebClient调用此服务,但我总是从服务器获得响应400(BadRequest)。但是,如果我使用HttpWebRequest,WCF会使用我的帖子并使用200正确响应。我也能够使用Fiddler成功构建一个请求来调用WCF服务。

WebClient代码

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();

正在发送的XML

var data2 = @"<Product><Sku>3327</Sku><NameProduct</Name><Category>Bumper</Category><Brand Id='3'><Collection>14</Collection></Brand></Product>";

为什么HttpWebRequest工作而WebClient不工作?我无法通过Fiddler看到发送标题的真正区别。

1 个答案:

答案 0 :(得分:4)

在发送字符串之前,请尝试在WebClient上设置Encoding属性。由于您没有指定它,我怀疑它默认为ASCII。引自UploadString reference page

  

在上传字符串之前,这个   method将其转换为Byte数组   使用中指定的编码   编码属性。这种方法阻止   而字符串传输。至   发送一个字符串并继续执行   在等待服务器的时候   响应,使用其中之一   UploadStringAsync方法。

 webClient.Encoding = Encoding.UTF8;