2016-01-31 2 views
2

Я пытаюсь отправить некоторый XML в веб-службу, и каждый раз, когда я это делаю, у меня появляется ошибка 400 Bad Request.400 Плохой запрос при отправке XML в WCF

В MyService.cs:

[ServiceContract(Namespace = "http://foo")] 
public class MyService 
{ 

    [OperationContract, WebInvoke(UriTemplate = "/GetData/", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")] 
    public string GetData(DataRequest req) 
    { 
     return "Success!"; 
    } 
} 

[DataContract(Namespace = "http://foo")] 
public class DataRequest 
{ 
    [DataMember] 
    public string ID { get; set; } 
    [DataMember] 
    public string Data { get; set; } 
} 

В отдельном Program.cs консоли приложения:

Path p = "C:\\Users\\sflan\\Desktop\\test.xml"; 
    string url = "http://foo/MyService.svc/GetData/"; 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
    req.Method = "POST"; 
    req.ContentType = "application/xml"; 

    byte[] data = Encoding.UTF8.GetBytes(p.readFile()); 
    req.ContentLength = data.Length; 
    using (Stream s = req.GetRequestStream()) 
    { 
     s.Write(data, 0, data.Length); 
     s.Close(); 
    } 

    try 
    { 
     WebResponse response = req.GetResponse(); 
     using (StreamReader rdr = new StreamReader(response.GetResponseStream())) 
     { 
      Console.WriteLine(rdr.ReadToEnd()); 
      rdr.Close(); 
     } 
    } 
    catch (Exception ex) { Console.WriteLine(ex.Message); } 

XML, я пытаюсь отправить в файле:

<root> 
    <Users ID="2" Data="This is some sample data." /> 
</root> 

Я искал вокруг часами поиск решения, но не смог его найти. Мой web.config позволяет максимальный размер буфера/пул и все, что мне удалось найти, но все равно не повезло. Стоит отметить, что если я удалю «DataRequest req» из моей подписи метода GetData, я получаю сообщение об успешном завершении, но мне нужно иметь возможность работать с данными XML.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

ответ

1

XML был плохо отформатирован, что-то я не собирал с должностей, сосредоточенных на одной и той же проблеме.

Правильный XML для этого выглядит следующим образом:

<DataRequest xmlns="http://foo"> 
     <Data>This is some sample data.</Data> 
     <ID>2</ID> 
</DataRequest> 
Смежные вопросы