2009-10-05 110 views
5

如何發送大文件從客戶端到服務器在C#中使用WCF?在配置代碼下面。如何使用WCF將大型文件從客戶端發送到服務器?

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="HttpStreaming_IStreamingSample" 
         maxReceivedMessageSize="67108864" 
          transferMode="Streamed"> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint 
      address="http://localhost:4127/StreamingSample.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="HttpStreaming_IStreamingSample" 
      contract="StreamingSample.IStreamingSample" 
      name="HttpStreaming_IStreamingSample" /> 
    </client> 
</system.serviceModel> 
+0

好的,這是客戶端配置。請同時顯示服務器配置和服務合同(你打電話給你的方法是什麼?) – 2009-10-06 11:25:13

回答

6

如Dzmitry已經指出的那樣,您需要檢查流式傳輸。

爲了能夠發送大文件的流爲您服務,您需要:

  • 創建一個接受Stream作爲它的輸入參數
  • 創建綁定服務的方法配置(服務器和客戶端上),它採用transferMode=StreamedRequest
  • 在客戶端創建一個流,並將其發送給服務方法

所以首先,你需要在你的服務合同的方法:

[ServiceContract] 
interface IYourFileService 
{ 
    [OperationContract] 
    void UploadFile(Stream file) 
} 

然後,你需要一個綁定配置:

<bindings> 
    <basicHttpBinding> 
    <binding name="FileUploadConfig" 
      transferMode="StreamedRequest" /> 
    </basicHttpBinding> 
</bindings> 

,並使用該綁定配置你的服務的服務端點:

<services> 
    <service name="FileUploadService"> 
    <endpoint name="UploadEndpoint" 
       address="......." 
       binding="basicHttpBinding" 
       bindingConfiguration="FileUploadConfig" 
       contract="IYourFileService" /> 
    </service> 
</services> 

然後,在您的客戶端中,您需要打開例如一個文件流並將其發送到服務方法而不關閉它。

希望有幫助!

馬克

+0

感謝這篇文章。我已經試過這個,但它會引發下面的異常:「遠程服務器返回一個錯誤:(400)錯誤的請求」 – Charan 2009-10-05 12:21:51

+0

,聽起來像你的配置是不好的 - 你可以發佈你現在的客戶端和服務器配置你原來的問題?只是部分。謝謝! – 2009-10-05 12:29:07

+0

<綁定名稱= 「HttpStreaming」 maxReceivedMessageSize = 「67108864」 transferMode = 「緩衝」> <服務名稱= 「WCFFileStreamingDemo.StreamingSample」 behaviorConfiguration = 「WCFFileStreamingDemo.StreamingSampleBehavior」> <端點地址= 「」 結合= 「basicHttpBinding的」 bindingName = 「HttpStreaming」 合同= 「WCFFileStreamingDemo.IStreamingSample」> <端點地址= 「MEX」 結合= 「mexHttpBinding」 合同= 「IMetadataExchange接口」/> – Charan 2009-10-05 14:40:46

2

除了增加readerQuota設置(如上所述),我不得不也起來了maxRequestLength所述的httpRuntime屬性內。

<system.web> 
    <httpRuntime maxRequestLength="2097151" /> 
</system.web> 
相關問題