古詩詞大全網 - 成語解釋 - c#用什麽替換wcf服務的功能

c#用什麽替換wcf服務的功能

WCF在跨域傳輸使用了兩種模型的方法調用:壹種是同步模型,這種模型顯然對那些需要大量操作時間的方法調用(如從數據庫中獲取大量數據時)是壹種痛苦的選擇。另壹種是異步模型的方法調用,這種模型是壹種非阻塞方法,其方法調用期間並不等到方法調用結束獲得結果才返回,而是方法調用壹經開始就馬上返回,程序可以繼續向前執行,被調用方法和主程序同時執行,在調用方法結束才返回結果。顯然這種模型給了我們很好的編程和使用體驗。

基於WCF在普通的編碼是以文本編碼方式在信道之間傳輸信息的,這種編碼會把所有的二進制信息以字節數組的形式存儲,並以Base64進行編碼,而Base64則是用三個字節來儲存4 個字符信息。使得數據量增大約30%以上。在WCF中引入了壹種專門針對數據流進行優化編碼的MTOM模型。下面我們使用編碼模型和調用模型三種方式來改寫文件流的傳輸,以提高WCF應用程序的性能。

1、 MTOM模型:

這模型在於將SOAP消息編碼成SOAP MT OM(消息傳輸優化機制)編碼。這種編碼是為那些包含大量的二進制數據的SOAP消息而做的,它是把數據流作為SOAP消息的附件而添加的。所以利用這種編碼在傳輸信道之間傳輸可以顯著提高傳輸性能。在WCF中MTOM模型的操作契約中只能使用單個Stream對象作為參數或者返回類型。

這種模型的特點如圖所示:

1.1實現服務契約

服務契約是服務所支持的操作、使用的消息交換模式和每壹則消息的格式,它控制消息被格式化的方式,在這裏由於要使用MTOM編碼消息,所以在操作契約中必須要以單壹的Stream對象為輸入輸出參數。所以這兒我們把服務定義為如下的形式:

[ServiceContract]

public interface ISendStreamService

{

[OperationContract]

void SendStream(Stream stream);

//這個方法的是為了傳遞文件的參數而設的

[OperationContract]

void FileNameSetting(string filename, string destinationpath);

}

另外我們還定義了壹個傳輸文件路徑的名稱的輔助方法:FileNameSetting();

1.2實現服務器方法

在上面定義了公***的接口後,接下來我們就實現接口的方法,主要的方法的目的是為了傳輸Stream對象,由於Stream是壹個抽象類,所以這兒以文件流為操作對象來使用SendStream()這個方法。

1.3客戶通過接口調用服務器方法

客戶端調用服務器方法至少有三種,這裏我們選擇工廠方法來實現,System.ServiceMode.Channel.ChannelFactory<T>類是這個信道工廠類,它的方法CreateChannel()可以創建T的實例。

ISendStreamService proxy=new

ChannelFactory<ISendStreamService>(“WSHttpBinding_ISendStreamService”).Create-

Channel();

proxy.FileNameSetting(file.Substring (file.LastIndexOf ("\\")+1), filePath);

proxy.SendStream(inStream);

1.4服務器和客戶端的配置信息

配置信息定義了雙方通信的終結點、綁定、契約行為及其他的配置如安全,可靠性等。服務器的配置如:

<service behaviorConfiguration="SendStreamServiceBehavior"

name="SendStreamService">

<endpoint address=" http://localhost:5504/WebSite2/ISendStreamService "

binding="wsHttpBinding" bindingConfiguration="MTMOBinding"

contract="ISendStreamService">

</endpoint>

<bindings>

<wsHttpBinding>

<binding name="MTMOBinding" messageEncoding="Mtom">

</wsHttpBinding>

</bindings>

</service>