C # объект в XML, отдых службы - PullRequest
1 голос
/ 07 июня 2011

У меня были проблемы с 400 Bad Response, и я свел его к полученному XML-запросу.Строка, которая работает:

<Data xmlns=\"http://www.eysnap.com/mPlayer\">
<Name>Chris</Name>
<Age>29</Age>
<Period>123</Period>
<msg>Why</msg>
</Data>

Однако, когда я пытаюсь отделить ее, я получаю:

<?xml version="1.0" encoding="utf-16"?>
<Data xmlns:Namespace="http://www.eysnap.com/mPlayer">
<Name>Chris</Name>
<Age>29</Age>
<Period>123</Period>
<msg>Why</msg>
</Data>

Я знаю, что это правильное форматирование, но мне либо нужно установить вывод xmlили просто настроить свой сервис, чтобы он принимал правильное представление.

Почтовый индекс клиента:

        StringBuilder s = new StringBuilder();
        StringWriter writter = new StringWriter(s);

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration=true;

        using(XmlWriter writer = XmlWriter.Create(writter,settings)){
        XmlSerializer x = new XmlSerializer(d.GetType());
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("Namespace","http://www.eysnap.com/mPlayer");
        x.Serialize(writter,d,ns);
        }

        string invalid = s.ToString();
        string valid ="<Data xmlns=\"http://www.eysnap.com/mPlayer\"><Name>Chris</Name><Age>29</Age><Period>12 Years</Period><msg>Fucking hell</msg></Data>";
            req.ContentLength = valid.Length;
            var sw = new StreamWriter(req.GetRequestStream());
            sw.Write(valid);
            sw.Close();

            res = (HttpWebResponse) req.GetResponse();
            Stream responseStream = res.GetResponseStream();
            var streamReader = new StreamReader(responseStream);

            //Read the response into an xml document
            var soapResonseXmlDocument = new XmlDocument();
            soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd());

            //return only the xml representing the response details (inner request)
            TextBox1.Text = soapResonseXmlDocument.InnerXml;
            //Response.Write(soapResonseXMLDocument.InnerXml);

Интерфейс службы отдыха:

    [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Xml,
        RequestFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "auth")]
    ResponseData Auth(Data rData);

Спасибо

Крис

1 Ответ

0 голосов
/ 07 июня 2011

Что произойдет, если вы сделаете это вместо:

XmlSerializer x = new XmlSerializer(d.GetType(), "http://www.eysnap.com/mPlayer");
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add(String.Empty, "http://www.eysnap.com/mPlayer");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...