[WCF]使用Svcutil.exe生成客戶端代理-創(chuàng)新互聯(lián)


svcutil.exe



參數


1 /async

我們提供的服務有:成都網站建設、網站設計、微信公眾號開發(fā)、網站優(yōu)化、網站認證、金平ssl等。為上千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的金平網站制作公司
  1. /async 同時生成同步和異步方法簽名。 

默認設置:只生成同步方法簽名。

縮寫形式:/a



2 /tcv:Version35

  1. /tcv:Version35  

指定應用程序針對 .NET Framework 的哪個版本。有效值為:Version30 和 Version35。默認值為 Version30。

縮寫形式:/tcv

Version30:如果為使用 .NET Framework 3.0 的客戶端生成代碼,則使用 /tcv:Version30。

Version35:如果為使用 .NET Framework 3.5 的客戶端生成代碼,則使用 /tcv:Version35。如果將 /tcv:Version35

與 /async 開關一起使用,則會同時生成基于事件的異步方法和基于回調/委托的異步方法。



3/collectionType:<類型>

  1. /collectionType:<類型> 

從架構中生成代碼時,指定要用作集合數據類型的完全限定或程序集限定名稱。

縮寫形式:/ct



4/reference:<文件路徑>

  1. /reference:<文件路徑> 

引用指定程序集中的類型。在生成客戶端時,使用此選項來指定可能包含類型的程序集,這些類型表示所導入的元數據

。

無法使用此開關指定消息協(xié)定和 XmlSerializer 類型。

如果引用了 DateTimeOffset,則會使用此類型,而不是生成新類型。如果應用程序是使用 .NET Framework 3.5 編寫

的,則 SvcUtil.exe 會自動引用 DateTimeOffset。

縮寫形式:/r

5/enableDataBinding

  1. /enableDataBinding 

在所有數據協(xié)定類型上實現 INotifyPropertyChanged 接口以啟用數據綁定。

縮寫形式:/edb



示例:


1

生成同步,帶事件的異步代碼,集合使用System.Collections.ObjectModel.ObservableCollection集合,指定程序集引用

  1. svcutil /a /d:d:/temp http://localhost:1998/Implement/AgriProductService.svc /ser:DataContractSerializer  
  2.  
  3. /tcv:Version35 /ct:System.Collections.ObjectModel.ObservableCollection`1 /reference:C:/"Program  
  4.  
  5. Files"/"Reference Assemblies"/Microsoft/Framework/.NETFramework/v4.0/WindowsBase.dll 



2

生成同步,帶事件的異步代碼,集合使用System.Collections.Generic.List集合

  1. svcutil /a /d:d:/temp http://localhost:1998/Implement/AgriProductService.svc /ser:DataContractSerializer  
  2.  
  3. /tcv:Version35 /ct:System.Collections.Generic.List`1 



3

生成同步,帶事件的異步代碼,集合映射為數組

  1. svcutil /a /d:d:/temp http://localhost:1998/Implement/AgriProductService.svc /ser:DataContractSerializer  
  2.  
  3. /tcv:Version35 

關于svcutil.exe的詳細介紹,可以參看微軟的MSDN。

ServiceModel 元數據實用工具 (Svcutil.exe)

如果生成的代理類是要給silverlight用,還需要手動修改一下。因為silverlight不支持同步操作,所有需要刪除代理類中的同步操作的代碼,只保留異步的代碼,還有就是需要添加下面的代碼,用于open和close客戶端的代碼。

要是有只生成異步代碼的參數就更好了,好像目前還沒有發(fā)現,默認生成同步代碼,加上/async參數就同時生成異步代碼。

下面的代碼添加到client類中,public partial class Service1Client : System.ServiceModel.ClientBase<IService1>, IService1,這個類中。

  1. private BeginOperationDelegate onBeginOpenDelegate; 
  2.  
  3. private EndOperationDelegate onEndOpenDelegate; 
  4.  
  5. private System.Threading.SendOrPostCallback onOpenCompletedDelegate; 
  6.  
  7. private BeginOperationDelegate onBeginCloseDelegate; 
  8.  
  9. private EndOperationDelegate onEndCloseDelegate; 
  10.  
  11. private System.Threading.SendOrPostCallback onCloseCompletedDelegate; 
  12.  
  13. public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> OpenCompleted; 
  14.  
  15. public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> CloseCompleted; 
  16.  
  17.  
  18.  
  19.  
  20. private System.IAsyncResult OnBeginOpen(object[] inValues, System.AsyncCallback callback, object asyncState) 
  21.     return ((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(callback, asyncState); 
  22.  
  23. private object[] OnEndOpen(System.IAsyncResult result) 
  24.     ((System.ServiceModel.ICommunicationObject)(this)).EndOpen(result); return null; 
  25.  
  26. private void OnOpenCompleted(object state) 
  27.     if ((this.OpenCompleted != null)) 
  28.     { 
  29.         InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); 
  30.         this.OpenCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState)); 
  31.     } 
  32.  
  33.  
  34. public void OpenAsync() 
  35.     this.OpenAsync(null); 
  36.  
  37. public void OpenAsync(object userState) 
  38.     if ((this.onBeginOpenDelegate == null)) 
  39.     { 
  40.         this.onBeginOpenDelegate = new BeginOperationDelegate(this.OnBeginOpen); 
  41.     } 
  42.     if ((this.onEndOpenDelegate == null)) 
  43.     { 
  44.         this.onEndOpenDelegate = new EndOperationDelegate(this.OnEndOpen); 
  45.     } 
  46.     if ((this.onOpenCompletedDelegate == null)) 
  47.     { 
  48.         this.onOpenCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnOpenCompleted); 
  49.     } 
  50.     base.InvokeAsync(this.onBeginOpenDelegate, null, this.onEndOpenDelegate, this.onOpenCompletedDelegate, userState); 
  51.  
  52.  
  53. private System.IAsyncResult OnBeginClose(object[] inValues, System.AsyncCallback callback, object asyncState) 
  54.     return ((System.ServiceModel.ICommunicationObject)(this)).BeginClose(callback, asyncState); 
  55.  
  56. private object[] OnEndClose(System.IAsyncResult result) 
  57.     ((System.ServiceModel.ICommunicationObject)(this)).EndClose(result); return null; 
  58.  
  59. private void OnCloseCompleted(object state) 
  60.     if ((this.CloseCompleted != null)) 
  61.     { 
  62.         InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); 
  63.         this.CloseCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState)); 
  64.     } 
  65.  
  66. public void CloseAsync() 
  67.     this.CloseAsync(null); 
  68.  
  69. public void CloseAsync(object userState) 
  70.     if ((this.onBeginCloseDelegate == null)) 
  71.     { 
  72.         this.onBeginCloseDelegate = new BeginOperationDelegate(this.OnBeginClose); 
  73.     } 
  74.     if ((this.onEndCloseDelegate == null)) 
  75.     { 
  76.         this.onEndCloseDelegate = new EndOperationDelegate(this.OnEndClose); 
  77.     } 
  78.     if ((this.onCloseCompletedDelegate == null)) 
  79.     { 
  80.         this.onCloseCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnCloseCompleted); 
  81.     } 
  82.     base.InvokeAsync(this.onBeginCloseDelegate, null, this.onEndCloseDelegate, this.onCloseCompletedDelegate, userState); 

還要提醒大家的是,用svcutil生成的異步訪問代碼,直接給silverlight使用,還有有點問題的。和使用VS2010添加服務生成的代碼相比,有一些出入,比如沒有實現ChannelBase,沒有在Client中override CreateChannel方法,還有一些局部的差異,導致使用起來會有一些不同。

出現上面的問題,不知道是我沒有用對svcutil的參數,還是它們本身就是有一些不同的。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現已開啟,新人活動云服務器買多久送多久。

當前名稱:[WCF]使用Svcutil.exe生成客戶端代理-創(chuàng)新互聯(lián)
網站路徑:http://bm7419.com/article18/diccdp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供移動網站建設、商城網站、自適應網站、網站排名、手機網站建設、品牌網站設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)