目錄
WCF配置文件
配置也是WCF編程中的主要組成部分。在以往的.net應用程序中,我們會把DBConn和一些動態加載類及變量寫在配置文件裏。但WCF有所不同。他指定向客戶端公開的服務,包括服務的地址、服務用於發送和接收消息的傳輸和消息編碼,以及服務需要的安全類型等。使用配置文件後,我們無需編譯即可修改WCF的變化的信息,提高了程序的靈活性。
如果在代碼裏寫了配置,那麼配置文件將不起作用。
Web程序在Web.config中配置,應用程序中在App.config中配置。
服務配置的主要部分
在Config中配置服務的結點爲:<system.serviceModel></system.serviceModel>,在這個節點中主要有三個平級的部分。如下代碼所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<!--配置服務和終結點開始-->
<services>
<service>
<endpoint></endpoint>
</service>
</services>
<!--配置服務和終結點結束-->
<!--配置綁定開始-->
<bindings>
<netTcpBinding>
<binding></binding>
</netTcpBinding>
</bindings>
<!--配置綁定結束-->
<!--配置行爲開始-->
<behaviors>
<serviceBehaviors>
<behavior>
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置行爲結束-->
</system.serviceModel>
</configuration>
Service配置節[必須有]:配置服務、接口和終結點。每個Service都會有以下兩個屬性。name:名稱空間.類名[服務的具體實現類]。behaviorConfiguration:一個在behaviors節點中找到的名稱。
Binding配置節[可有可無]:配置綁定,如http,tcp等。
Behavior配置節[可有可無]:配置行爲,如認證等。
WCF的通信模式
WCF在通信過程中有三種模式:請求與答覆、單向、雙工通信。
請求與答覆模式
客戶端發送請求,然後一直等待服務端的響應(異步調用除外),期間處於假死狀態,直到服務端有了答覆後才能繼續執行其他程序,如下圖所示(圖中的粗紅線在此時代表順序並不代表調用):
請求與答覆模式爲WCF的默認模式,如下代碼所示:
[OperationContract]
string ShowName(string name);
即使返回值是void 也屬於請求與答覆模式。
缺點:如果用WCF在程序A中上傳一個2G的文件,那麼要想執行程序B也許就是幾個小時後的事情了。如果操作需要很長的時間,那麼客戶端程序的響應能力將會大大的下降。
優點:有返回值我們就可以向客戶端返回錯誤信息,如:只接收".rar"文件等信息。
單向模式
客戶端向服務端發送求,但是不管服務端是否執行完成就接着執行下面的程序。如下圖所示:
單向模式要在OpertaionContract的屬性中顯示設置值,代碼如下:
[OperationContract(IsOneWay = true)]
void ShowName(string name);
優缺點與“請求響應模式”差不多倒過來。
特點:使用 IsOneWay=true 標記的操作不得聲明輸出參數、引用參數或返回值
雙工模式
雙工模式建立在上面兩種模式的基礎之上,實現客戶端與服務端相互的調用。相互調用:以往我們只是在客戶端調用服務端,然後服務端有返回值返回客戶端,而相互調用不光是客戶端調用服務端,而且服務端也可以調用客戶端的方法。如下圖所示
在上圖中,客戶端的程序A調用服務端的程序A,服務程序A執行完成前又調用客戶端的程序D,然後再返回到程序A,圖有點亂,其實就是爲了說明“服務端”與“客戶端”可以相互調用,下面直接看代碼。
如我們所說的,雙工模式是建立在以上兩種模式之上的模式,他們並不衝突,代碼如下:
[ServiceContract(CallbackContract = typeof(IUserCallback))]
public interface IUser
{
[OperationContract]
string ShowName(string name);
}
//回調的接口
public interface IUserCallback
{
[OperationContract(IsOneWay = true)]
void PrintSomething(string str);
}