– 如果執行操作需要很長的時間,則會降低客戶端性能和響應能力。
– 響應消息中可返回SOAP 錯誤,這表明可能在通信或處理中發生了一些與服務有關的錯誤狀況。
例題:
如,上上節所示。直接添加WCF服務應用程序
二,單工模式
單向通信應是指通信只在一個方向進行,即從客戶端流向服務。服務不會發送響應,而客戶端也不會期望會有響應。這種情況下,客戶端發送消息,然后繼續執行。
若要為返回void 的操作指定單向消息交換,請將IsOneWay 屬性設置為true,默認為false.
[OperationContract(IsOneWay=true)] 方法不能帶有返回值、引用參數、輸出參數
例題:就是將請求/響應模式例題上的方法改為 void()類型的,且客戶端只是向服務端發送消息,服務器無消息返回給客戶端,即從客戶端看不出效果。
缺點
-看不出效果
優點
-響應速度快
三,雙工模式
雙工模式的特點是,無論使用單向消息發送還是請求/答復消息發送方式,服務和客戶端均能夠獨立地向對方發送消息。對於必須直接與客戶端通信或向消息交換的任意一方提供異步體驗(包括類似於事件的行為)的服務來說,這種雙向通信形式非常有用。
– 若要設計雙工協定,還必須設計回調協定,並將該回調協定的類型分配給標記服務協定的ServiceContractAttribute 屬性(attribute)的CallbackContract 屬性(property)。
– 若要實現雙工模式,您必須創建第二個接口,該接口包含在客戶端調用的方法聲明
差不多類似於兩個單工模式合並
例題:
服務端(配置文件和引用不再重復)
配置文件:略,如上節,配置文件部署形似。
IService1.cs:
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallback))]//獲取雙工協定時回調的協定的類型
public interface IService1
{
[OperationContract(IsOneWay = true)]
void AddNumer(int x,int y);
}
public interface IServiceDuplexCallback //CallbackContract回調客戶端方法
{
[OperationContract(IsOneWay = true)]
void Calculate(int result);
}
Service1.cs:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]//指服務協定實現內置的行為,獲取傳入消息中調用的實例數
public class Service1 : IService1
{
IServiceDuplexCallback callback
{
get { return OperationContext.Current.GetCallbackChannel<IServiceDuplexCallback>(); }//獲取客戶端的通道及上下文權限
}
public void AddNumer(int x, int y)
{
int z = x + y;
callback.Calculate(z);
}
服務端:
添加服務引用,命名為myService
添加一個類CallbackHandler,用於向服務器流入方法
public class CallbackHandler : myService.IService1Callback
{
public void Calculate(int result)
{
Console.WriteLine("結果為:" + result);
}
}
program.cs
InstanceContext ic = new InstanceContext(new CallbackHandler());//實現上下文切換,獲取服務器的實例
myService.Service1Client client = new wcfClient.myService.Service1Client(ic);
client.AddNumer(3, 4);
以上是個小例子,具體的完善在以后講解半雙工和全雙工。