.NET動態調用WebService

這不是一篇教你瞭解WebService的博文,也不是對WebService的深刻理解, 這是一篇教你在開發過程當中,若是動態的調用WebService一個方法.web

在比較常見的WebService調用,咱們通常是選擇在項目中,新建添加引用的方式來引用WebService服務. 例以下面的方式  : 

1 : 在項目中新建添加服務引用
 
2 : 輸入引用服務器的地址
而後咱們的程序集下就會多出剛纔新建的Service 引用相關的文件引用.
而後咱們就能夠直接在代碼中調用ServiceReference1 , 就能夠了,在這裏就不在繼續的詳細作解釋說明了,咱們仍是回到主題,如何減去這些步驟,由於這樣的方式添加引用,1 : 很差擴展, 2 : 比較繁瑣 

下面介紹一種方式用來動態的調用WebService References :

一 : 在項目中右鍵選擇新建
而後咱們修改Component類本部.
咱們添加完成以後,Component類內部默認爲:
 1   public partial class Component1 : Component
 2     {
 3         public Component1()
 4         {
 5             InitializeComponent();
 6         }
 7 
 8         public Component1(IContainer container)
 9         {
10             container .Add(this );
11 
12             InitializeComponent();
13         }
14     }
在此咱們須要作一些修改.
首先在項目中添加WebService的引用.
 
而後將Component類 繼承自 SoapHttpClientProtocol
至此將Component類改成 :
 1  [ WebServiceBinding (Namespace = "http://tempuri.org/" )]
 2     public class Component1 : SoapHttpClientProtocol
 3     {
 4         public Component1()
 5         {
 6             InitializeComponent();
 7         }
 8 
 9         public Component1(IContainer container)
10         {
11             container . Add(this );
12 
13             InitializeComponent();
14         }
15     }
SoapHttpClientProtocol SoapHttpClientProtocol類能夠直接訪問指定的webService的指定方法 
若要與 XML Web services 通訊,請爲要調用的 XML Web services 建立一個間接或直接從  WebClientProtocol 派生的代理類。 能夠不用手動建立代理類,而使用 Web 服務描述語言工具 (Wsdl.exe) 爲給定 XML Web services 的服務說明建立代理類。 當爲 SOAP 協議生成代理類時,對 XML Web services 方法的同步調用經過  Invoke 方法進行,而異步調用經過 BeginInvoke 方法和  EndInvoke 方法進行。
而後在配置文件中寫入咱們所要引用的服務器連接地址 :
1 <add key="ServiceAddress" value="http://localhost:7340/CourseMakerService.asmx" />

在咱們添加的Conponent Class 構造中調用服務器連接地址服務器

1  public Component1( string serviceUrl)
2  {
3        if (serviceUrl. Equals( "UpdateServiceAddress" ))
4           base .Url = ConfigurationManager . AppSettings["UpdateServiceAddress" ];
5       else
6           base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
7   }

而後當咱們想要調用WebService中的方法時,只須要在Component1類中寫. 若是個人調用方式異步

 1 [ WebServiceBinding(Namespace = "http://tempuri.org/" )]
 2     public class OffLineLearingClient : SoapHttpClientProtocol
 3     {
 4         public OffLineLearingClient( string serviceUrl)
 5         {
 6             if (serviceUrl. Equals( "UpdateServiceAddress" ))
 7                 base .Url = ConfigurationManager . AppSettings["UpdateServiceAddress" ];
 8             else
 9                 base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
10         }
11         public OffLineLearingClient()
12         {
13             base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
14         }
15         [ SoapDocumentMethod ]
16         public YHBJUser GetUser( YHBJUser user)
17         {
18             return base . Invoke("GetUser" , new object [] { user })[0 ] as YHBJUser ;
19         }
20 
21         [ SoapDocumentMethod ]
22         public List < YHBJClass> GetTrainings11( string userId)
23         {
24             return base . Invoke("GetTrainings11" , new object [] { userId })[0 ] as List <YHBJClass > ;
25         }

這樣咱們就能夠動態的實現若是調用WebService了.工具

相關文章
相關標籤/搜索