2011-05-30 59 views
2

有什麼方法可以將文件上傳到WCF Web API端點?如果是這樣,我怎樣才能訪問網絡流來讀取數據?上傳文件WCF Web API端點

任何幫助,非常感謝。

謝謝。

回答

4

假設您在客戶端上談到:

一種方式來做到這一點是創建一個從HttpContent派生的FileContent類。在覆蓋中,當HTTPClient準備好接收流時,您將獲得NetworkStream。

如果您詢問服務器端,那麼您可以簡單地獲取HTTPRequestMessage並訪問httpRequestMessage.Content.ContentReadStream屬性。


更新

默認情況下,WCF傳輸被限制在65K發送消息。如果你想發送更大的文件,你需要啓用「流式傳輸模式」,你需要增加MaxReceivedMessageSize的大小,這就是爲了防止有人通過上傳大量文件來殺死你的服務器。

所以,你可以使用綁定配置來做到這一點,或者你可以在代碼中做到這一點。下面是做到這一點的代碼的一種方式:

var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]); //Assuming one endpoint 
endpoint.TransferMode = TransferMode.Streamed; 
endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10; // Allow files up to 10MB 
+0

我不認爲WCF Web API Preview 4支持接受multipart/form-data作爲內容類型。我無法實現文件上傳的端點。希望這將在下次預覽中得到解決。 – aumanets 2011-06-14 19:42:56

+0

您不需要使用multipart/form-data作爲內容類型。你可以發送內容作爲application/octet-stream – 2011-06-14 19:49:19

+0

我試過使用application/octet-stream並且沒有成功。現在我不確定這個問題是由內容類型引起的。當我發出請求時,它沒有達到配置的終點,並且不會引發任何異常。也許這是因爲發送的數據大於65535字節?你知道如何改變WCF Web API的這個值嗎? – aumanets 2011-06-16 09:49:42

2

這個答案僅設計與Web API預覽添加一些細節6.

TransferModeMaxRecievedMessageSize是新通過WebApiConfigurationClass暴露。

var builder = new WebApiConfiguration(); 
builder.TransferMode = TransferMode.Streamed; 
builder.MaxReceivedMessageSize = 1024 * 1024 * 10; 

var serviceRoute = new WebApiRoute(route, new WebAPIServiceHostFactory() { Configuration = builder }, typeof(MyService)); 

我喜歡它!