XML Response содержит кодировку HTML в API Response - PullRequest
0 голосов
/ 14 июля 2011

Я создал службу WCF, которой я передаю поток по запросу.Код на стороне клиента выглядит следующим образом:

  FileInfo fo = new FileInfo("c:/Downloads/test.xml");
        StreamWriter wo = fo.CreateText();

        XmlDocument MyXmlDocument = new XmlDocument();
        MyXmlDocument.Load("C:/DataFiles/Integrations/RequestXML.xml");
        byte[] RequestBytes = Encoding.GetEncoding("iso-8859-1").GetBytes(MyXmlDocument.OuterXml);

        Uri uri = new Uri("http://localhost:63899/MyRESTServiceImpl.svc/Receive");

        HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);

        Request.ContentLength = RequestBytes.Length;

        Request.Method = "POST";

        Request.ContentType = "text/xml";

        Stream RequestStream = Request.GetRequestStream();
        RequestStream.Write(RequestBytes, 0, RequestBytes.Length);
        RequestStream.Close();

        HttpWebResponse response = (HttpWebResponse)Request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string r = reader.ReadToEnd();
        //XmlDocument ReturnXml = new XmlDocument();
        //ReturnXml.LoadXml(reader.ReadToEnd());
        response.Close();

        wo.Write(r);

Прямо сейчас все, что я хочу сделать, это обработать запрос и затем вернуть XML обратно клиенту для целей тестирования.Вот мой код IMyRESTServiceImpl.cs и MyRESTServiceImpl.svc.cs соответственно:

[ServiceContract]
public interface IMyRESTServiceImpl
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)]
    Stream Receive(Stream text);
}


public class MyRESTServiceImpl : IMyRESTServiceImpl
{

    public Stream Receive(Stream text)  
        {  
            string stringText = new StreamReader(text).ReadToEnd();  

            return text;
        }   

}

В основном происходит то, что API возвращает мне XML в строковых тегах и использует кодировку HTML для знаков <и>(& gt; & lt;).Мне нужно просто вернуть мне XML в точности так, как он был отправлен.Я отладил его, и XML остается неизменным на стороне сервера, так что это происходит при его отправке обратно.Любые идеи о том, как справиться с этим?Спасибо.

1 Ответ

2 голосов
/ 14 июля 2011

Реализация, которую вы имеете, не компилируется - объявлен метод, возвращающий Stream, но он возвращает String.Если вы вернётесь как строка, она будет кодировать символы XML;если вам не нужна кодировка, верните ее либо в виде потока, либо в виде XmlElement (или XElement).

Обновление с примером

Это примерметод, возвращающий Stream для произвольного XML-ответа:

[WebGet]
public Stream GetXML()
{
    string theXml = @"<products>
  <product name=""bread"" price=""1.33">
    <nutritionalFacts>
      <servings>2</servings>
      <calories>150</calories>
      <totalFat>2</totalFat>
    </nutritionalFacts>
  </product>
  <product name=""milk"" price=""2.99">
    <nutritionalFacts>
      <servings>8</servings>
      <calories>120</calories>
      <totalFat>5</totalFat>
    </nutritionalFacts>
  </product>
</products>";
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    MemoryStream result = new MemoryStream(Encoding.UTF8.GetBytes(theXml);
    return result;
}
...