2011-07-14 10 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文字がエンコードされます。エンコーディングが必要ない場合は、ストリームとして、または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を返信する唯一の方法でした。ストリームとして返信しようとすると、クライアント側で何も受信されません。 – Nozoku

+0

私は答えでの例を追加 – carlosfigueira

+0

それは働いた。ありがとう。 – Nozoku

関連する問題