2012-05-24 60 views
3

我正在使用WCF 4.0 + REST編寫高吞吐量Web服務。 Web服務返回XML響應。我的操作方法的返回類型是XDocument,WCF負責返回XML。但是,在內存中構建XML響應然後將其返回給調用者並不是非常有效。如何直接向網絡傳輸HTTP響應

我想從XmlDocument/XDocument移到XmlWriter。在控制檯應用程序中,我可以輕鬆地將響應傳輸到文件,但WCF又如何?我可以使用WebOperationContext,HttpContext流式傳輸響應,並返回一個流?

FileStream fs = new FileStream("New.xml", FileMode.Create, FileAccess.Write); 
using (XmlWriter writer = XmlWriter.Create(fs)) 
{ 
    FormatResponse(writer, myDate); 
} 

感謝您的幫助!

回答

0

您可以結合REST和WCF流媒體。例如,看看here

1

只有TCP,IPC,WebHttpBinding和basicHttp綁定支持流式傳輸。

你的合同定義

[OperationContract] 
Stream GetXml(); 

您的服務方法的實現

public Stream GetXml() 
{ 
    string filePath = "document.xml"; 

    try 
    { 
     FileStream xmlFileStream = File.OpenRead(filePath); 
     return xmlFileStream; 
    } 
    catch (IOException ex) 
    { 
     // Exception handling logic 
    } 
} 

在服務器端更改綁定配置(在這種情況下StreamedResponse)

<bindings> 
    <basicHttpBinding> 
     <binding name = "StreamedHTTP" 
       transferMode = "StreamedResponse" 
     /> 
    </basicHttpBinding> 
</bindings> 

這裏是TransferMode枚舉:

public enum TransferMode 
{ 
    Buffered, //default 
    Streamed, 
    StreamedRequest, 
    StreamedResponse 
} 

注:

  • 不要忘了在客戶端設置maxReceivedMessageSize =「一些價值」爲大流
  • 當您使用流媒體,你不能使用MESSAGE-級別轉移安全。
  • 當使用SessionMode.Required配置合同時,您無法使用流式傳輸。
  • 使用TCP綁定進行流式傳輸時,也無法啓用可靠的 消息傳遞。
+1

您忘記了WebHttpBinding:它也支持流式傳輸。 – Dennis

+0

謝謝@丹尼斯。 – Beygi