2009-03-14 3 views
3

Ich habe einen WCF-Dienst wie folgt deklariert:WCF Pfosten-/WebRequest Works - WebClient nicht

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

Ich versuche, diesen Dienst zu rufen WebClient verwenden, aber ich bin immer eine Antwort 400 (BadRequest) immer aus der Server. Wenn ich jedoch HttpWebRequest verwende, verwendet WCF meinen Post und antwortet korrekt mit 200. Ich bin auch in der Lage, eine Anfrage erfolgreich zu erstellen, indem ich Fiddler benutze, um den WCF-Service aufzurufen.

WebClient-Code

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 Code

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

Die XML, die

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

Warum ist gesendet wird, dass HttpWebRequest funktioniert und WebClient nicht? Ich kann keinen echten Unterschied in den gesendeten Kopfzeilen über Fiddler sehen.

+0

ich denke, es in der Zeichenfolge eines Elements nach unten, um Sonderzeichen kommt. Wenn ich "Comfort®" im Produktnamen übergebe, funktioniert es mit HttpWebRequest - funktioniert jedoch nicht mit dem WebClient. Führt der WebClient die Codierung vor dem Senden durch? –

+1

Ich hatte eine andere Art von Problem, aber diese Frage gab mir die Chance, meinen Code zu korrigieren. –

Antwort

4

Versuchen Sie, die Encoding Eigenschaft auf dem WebClient Einstellung, bevor Sie die Zeichenfolge senden. Da Sie es nicht angeben, vermute ich standardmäßig ASCII. Zitat aus dem UploadString reference page.

vor dem String Hochladen Diese Methode wandelt es in ein Byte-Array die Kodierung in der Encoding Eigenschaft angegeben ist. Diese Methode blockiert , während die Zeichenfolge übertragen wird. Um eine Zeichenfolge senden und Ausführung weiterhin während des Wartens auf die Antwort des Servers, eine der Methoden UploadStringAsync verwenden.

webClient.Encoding = Encoding.UTF8;