2011-07-14 85 views
0

我創建了一個WCF服務,我將一個流傳遞給請求。客戶端代碼如下所示:XML響應在API響應中包含HTML編碼

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編碼爲<和>符號(& ); & lt;)。我需要它將XML正確地返回給我,就像發送它一樣。我已經對它進行了調試,並且XML在服務器端保持不變,所以在發送它時發生這種情況。有關如何處理這個問題的任何想法?謝謝。

回答

2

你有沒有編譯的實現 - 該方法聲明返回Stream,但它返回String。如果您以字符串形式返回,則會對XML字符進行編碼;如果您不想編碼,請將其作爲Stream或XmlElement(或XElement)返回。

[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; 
} 
+0

是的,但你怎麼發回的數據流:

與例如

這是返回一個流的任意XML響應的方法的一個例子更新?這是我卡住的地方。我在互聯網上搜索了一個可行的例子,但沒有發現任何東西。使用字符串是我可以讓XML返回的唯一方法。當試圖將其作爲Stream發回時,客戶端不會收到任何內容。 – Nozoku

+0

我在答案中加了一個例子 – carlosfigueira

+0

明白了。謝啦。 – Nozoku