WSE 3.0异步调用, MTOM, Custom Policy Trace Assertion
生活随笔
收集整理的這篇文章主要介紹了
WSE 3.0异步调用, MTOM, Custom Policy Trace Assertion
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 異步調用Web Service
??? 對Web Service端沒有要求,只是Client端調用方法上不同。
private?string?_guid?=?Guid.NewGuid().ToString().ToUpper();
MyServiceRef.MyServiceWse?serviceProxy?=?new?WSEClient.MyServiceRef.MyServiceWse();
serviceProxy.HelloWorldCompleted?+=
??????? new?WSEClient.MyServiceRef.HelloWorldCompletedEventHandler(serviceProxy_HelloWorldCompleted);
serviceProxy.HelloWorldAsync(_guid);
private?void?serviceProxy_HelloWorldCompleted(object?sender,?MyServiceRef.HelloWorldCompletedEventArgs?args)
{
????if?(args.Error?!=?null)
????{
????????//process?for?exception
????}
????else?if?(args.Cancelled)
????{
????????//cancelled
????}
????else
????{
????????//process?for?success
????????string?result?=?args.Result;
????}
} ??? 取消調用:serviceProxy.CancelAsync(_guid);,客戶端的處理被立刻Cancel,服務器端則不一定,可能需要等到Web Service方法執行完畢。
??? 2. Custom Policy Trace Assertion
??? 參考WSE 3.0 samples中的CustomPolicyTraceAssertion。首先分別繼承PolicyAssersion和SoapFilter兩個類,實現自定義的Trace功能,然后參照Samples的wse3policyCache.config手工添加相關的配置節點。
??? 另外需要注意的一點是WSE 3.0 Server端和Client端output filter、input filter的處理機制,弄明白每一個SOAP消息在經過output filter或者input filter前后所發生的變化,以及對應于security policy配置文件中的位置關系,這樣能準確地確定你需要記錄的Trace的信息。以CustomPolicyTraceAssertion的Sample為例,假如Web Service端的配置如下:
???
??? 圖中的input1.xml、input2.xml、output1.xml、output2.xml所截取的SOAP消息位置分別如下圖:
???
??? 下標為2的文件截取的都是經過WSE簽名、加密處理之后的SOAP消息,而下標為1的則是未經過WSE簽名、加密的原始SOAP消息。上圖只是一個示例,在WSE 3.0的Sample中,兩個traceAssertion中的inputfile必須為同一個文件,outputfile也一樣。你可以選擇只記錄未加密的SOAP消息,只需要刪除第一個traceAssertion就可以。
??? 3. MTOM
??? MTOM在WSE 3.0中用于服務器端和客戶端傳遞二進制文件等數據,或者用于大數據量的消息。MTOM允許在傳遞大數據量或二進制文件時使用WSE 3.0消息層的安全性機制,另外對于大數據量采用了優化措施,提高傳輸效率。
??? 使用MTOM很簡單,首先使用WSE 3.0 Settings工具分別為Web Service和Client設置啟用MTOM(或者也可以在代碼上進行設置),然后傳送方將要傳送的數據轉化成byte[]發送給接收方,接受方收到數據后保存成文件或做其他處理。WSE 3.0 Samples中的MTOM示例演示了三種方式:不加密傳輸、加密傳輸、通過IXmlSerializable直接使用網絡流(Network Stream)傳輸。
??? 把WSE 3.0的代碼翻看了一下,本來準備對filter、pipeline方面調用序列、大致處理,以及數字簽名處理過程、CA證書的使用細節等方面再詳細寫一寫,但這篇post已經掛在草稿中2個多月了,一直沒有時間來整理。
??? 對Web Service端沒有要求,只是Client端調用方法上不同。
private?string?_guid?=?Guid.NewGuid().ToString().ToUpper();
MyServiceRef.MyServiceWse?serviceProxy?=?new?WSEClient.MyServiceRef.MyServiceWse();
serviceProxy.HelloWorldCompleted?+=
??????? new?WSEClient.MyServiceRef.HelloWorldCompletedEventHandler(serviceProxy_HelloWorldCompleted);
serviceProxy.HelloWorldAsync(_guid);
private?void?serviceProxy_HelloWorldCompleted(object?sender,?MyServiceRef.HelloWorldCompletedEventArgs?args)
{
????if?(args.Error?!=?null)
????{
????????//process?for?exception
????}
????else?if?(args.Cancelled)
????{
????????//cancelled
????}
????else
????{
????????//process?for?success
????????string?result?=?args.Result;
????}
} ??? 取消調用:serviceProxy.CancelAsync(_guid);,客戶端的處理被立刻Cancel,服務器端則不一定,可能需要等到Web Service方法執行完畢。
??? 2. Custom Policy Trace Assertion
??? 參考WSE 3.0 samples中的CustomPolicyTraceAssertion。首先分別繼承PolicyAssersion和SoapFilter兩個類,實現自定義的Trace功能,然后參照Samples的wse3policyCache.config手工添加相關的配置節點。
??? 另外需要注意的一點是WSE 3.0 Server端和Client端output filter、input filter的處理機制,弄明白每一個SOAP消息在經過output filter或者input filter前后所發生的變化,以及對應于security policy配置文件中的位置關系,這樣能準確地確定你需要記錄的Trace的信息。以CustomPolicyTraceAssertion的Sample為例,假如Web Service端的配置如下:
???
??? 圖中的input1.xml、input2.xml、output1.xml、output2.xml所截取的SOAP消息位置分別如下圖:
???
??? 下標為2的文件截取的都是經過WSE簽名、加密處理之后的SOAP消息,而下標為1的則是未經過WSE簽名、加密的原始SOAP消息。上圖只是一個示例,在WSE 3.0的Sample中,兩個traceAssertion中的inputfile必須為同一個文件,outputfile也一樣。你可以選擇只記錄未加密的SOAP消息,只需要刪除第一個traceAssertion就可以。
??? 3. MTOM
??? MTOM在WSE 3.0中用于服務器端和客戶端傳遞二進制文件等數據,或者用于大數據量的消息。MTOM允許在傳遞大數據量或二進制文件時使用WSE 3.0消息層的安全性機制,另外對于大數據量采用了優化措施,提高傳輸效率。
??? 使用MTOM很簡單,首先使用WSE 3.0 Settings工具分別為Web Service和Client設置啟用MTOM(或者也可以在代碼上進行設置),然后傳送方將要傳送的數據轉化成byte[]發送給接收方,接受方收到數據后保存成文件或做其他處理。WSE 3.0 Samples中的MTOM示例演示了三種方式:不加密傳輸、加密傳輸、通過IXmlSerializable直接使用網絡流(Network Stream)傳輸。
??? 把WSE 3.0的代碼翻看了一下,本來準備對filter、pipeline方面調用序列、大致處理,以及數字簽名處理過程、CA證書的使用細節等方面再詳細寫一寫,但這篇post已經掛在草稿中2個多月了,一直沒有時間來整理。
總結
以上是生活随笔為你收集整理的WSE 3.0异步调用, MTOM, Custom Policy Trace Assertion的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 7.04上安装Xfce
- 下一篇: 紧凑的面试历程