我有一個與我的服務器上的WCF服務通信的Silverlight(v3)應用程序。 Silverlight應用程序所做的一件事是請求一個動態生成的數據文件 - 該數據文件由服務創建,並且需要(最終)通過SaveFileDialog保存在本地用戶的計算機上。Silverlight應用程序請求WCF服務中的文件
我的問題是,Silverlight獲取此文件的最佳方式是什麼?相關文件可能相當大。
任何幫助,將不勝感激。
我有一個與我的服務器上的WCF服務通信的Silverlight(v3)應用程序。 Silverlight應用程序所做的一件事是請求一個動態生成的數據文件 - 該數據文件由服務創建,並且需要(最終)通過SaveFileDialog保存在本地用戶的計算機上。Silverlight應用程序請求WCF服務中的文件
我的問題是,Silverlight獲取此文件的最佳方式是什麼?相關文件可能相當大。
任何幫助,將不勝感激。
如果您已經知道被請求的文件可能相當大,那麼您可能需要爲此請求創建您自己的特定端點,該端點支持流式傳輸。
因此,您將擁有用於「普通」方法調用的常規端點(例如http://yourserver:8080/YourService),以及第二個端點(http://yourserver:8085/YourService),該端點將支持流式傳輸,以返回具有合理內存開銷的文件。
配置,這應該是相當簡單 - 服務器和客戶機上,你需要指定一個綁定配置,以支持流:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="streamed"
transferMode="StreamedResponse" />
</basicHttpBinding>
</bindings>
<services>
<service name="YourService">
<endpoint name="normal"
address="http://yourserver:8080/YourService"
binding="basicHttpBinding"
contract="IYourServiceContract" />
<endpoint name="filetransfer"
address="http://yourserver:8085/YourService"
binding="basicHttpBinding"
bindingConfiguration="streamed"
contract="IYourServiceContract" />
</service>
</services>
</system.serviceModel>
在客戶端,當然,你得有<client>
標籤內的兩個端點,但除此之外,所有內容都應該相同。
「transferMode」默認爲「緩衝」,例如,整個消息被緩衝並在一個塊中發送。
您的其他選項是「流式傳輸」(流式傳輸),「StreamedRequest」(如果您有非常大的請求)或「StreamedResponse」(如果只有響應,即正在傳輸的文件非常大)。
在這種情況下,您將在服務中使用單一方法返回流(即文件)。從你的客戶端,當你調用這個服務方法的時候,你會得到一個流,然後你可以以塊的形式讀取,就像MemoryStream或FileStream一樣。
Marc