1、Behaviors(行爲) 定義WCF 客戶端與服務端運行時的特性或配置,behaviors 不僅影響WCF 運行時,還會影響客戶端與服務端之間的數據通信。
2、Behaviors 分類
服務級別,終結點級別,操作級別,契約級別
3、服務級別
ServiceBehavior,可以控制行爲的併發性、實例化、限流、事務、會化管理、線程
1)AddressFilterMode
允許修改消息過濾器
三個屬性值:Any,Exact,Prefix
消息分發器利用此設置來保證由正確的終結點處理傳入的消息
2)AutomaticSessionShutdown
阻止服務器在全部消息都處理完畢後關閉會話
設置爲false時,就可以控制會話的生命週期了
3)ConcurrencyMode
設置服務是以單線程還是多線程運行
默認值Single
4)IgnoreExtensionDataObject
默認值false
設置爲true,消息中不帶任何未知的序列化數據
5)IncludeExtceptionDetailInFaults
設置爲true,把未處理的異常作爲SOAP錯誤消息發送給客戶端
開發環境需要設置爲true,生產環境中需要設置爲false
6)InstanceContextMode
設置服務實例的生命週期
值:PerSession,PerCall,Single
7)MaxItemsInObjectGraph
當對象超出序列化或反序列化的最大項數時,會產生一個異常
8)ReleaseServiceInstanceOnTransactionComplete
設置爲true,表示當活動事務結束後釋放服務對象
ServiceHost host = new ServiceHost(typeof(Service1));
host.AddServiceEndpoint(typeof(IService2), new BasicHttpBinding(), "http://localhost:9000/Service1");
ServiceMetadataBehavior d = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (d == null)
{
d = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(d);
}
d.HttpGetEnabled = true;
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
4、操作級別
OperationBehavior,可以控制的行爲有,事務行爲、訪問者身份識別行爲、對象回收行爲
1)AutoDisposeParameters
允許操作自動處理輸入、輸出和引用參數,默認爲false
2)TranactionAutoComplete
當事務啓動時,如果當前方法沒有產生錯誤,把當前事務標誌爲結束
設置爲false,手動把事務標誌爲結束或放棄
3)TransactionScopeRequired
可判斷一個事務是否是當前方法所請求的
4)Impersonation
有時需要以訪問者的身份執行操作,需要設置這個屬性爲Required或Allowed
5)ReleaseInstanceMode
允許覆蓋當前的服務對象
None,BeforeCall,AfterCall,BeforeAndAfterCall
5、終結點級別
EndpointBehavior,服務行爲只在服務端應用,終結點行爲可以應用於服務,也可以應用於客戶端。可以實現對客戶端證書的使用和序列化器參數的管理。
1)dispatcherSynchronization
指定允許服務進行異步答覆的終結點行爲。
2)enableWebScript
啓用終結點行爲,此行爲使得可以使用 ASP.NET AJAX 網頁中的服務。此行爲只能與 webHttpBinding 標準綁定或 webMessageEncoding 綁定元素一起使用。
3)endpointDiscovery
指定終結點的各種發現設置,例如終結點的可發現性、範圍以及對終結點元數據的任何自定義擴展。
4)soapProcessingExtension
定義用於封送不同綁定類型和消息版本之間消息的客戶端終結點行爲。
5)synchronousReceive
指定服務或客戶端應用程序中用於接收消息的運行時行爲。它不具有任何屬性或子元素。
6)transactedBatching
指定接收操作是否支持事務批處理。
7)webHttp
通過配置指定終結點上的 WebHttpBehavior。此行爲與 webHttpBinding 標準綁定結合使用時,將爲 WCF 服務啓用 Web 編程模型。
6、契約級別