1. 程式人生 > >C#呼叫WebService服務(動態呼叫)

C#呼叫WebService服務(動態呼叫)

1 建立WebService

  1. using System;  
  2. using System.Web.Services;  
  3. namespace WebService1  
  4. {  
  5.     /// <summary>
  6.     /// Service1 的摘要說明
  7.     /// </summary>
  8.     [WebService(Namespace = "http://tempuri.org/", Description="測試服務")]  
  9.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  10.     [System.ComponentModel.ToolboxItem(false)]  
  11.     // 若要允許使用 ASP.NET AJAX 從指令碼中呼叫此 Web 服務,請取消對下行的註釋。
  12.     [System.Web.Script.Services.ScriptService]  
  13.     publicclass Service1 : System.Web.Services.WebService  
  14.     {  
  15.         [WebMethod(Description="Hello World")]  
  16.         publicstring HelloWorld()  
  17.         {  
  18.             return"Hello World";  
  19.         }  
  20.         [WebMethod(Description="A加B")]  
  21.         publicint Add(int a, int b)  
  22.         {  
  23.             return a + b;  
  24.         }  
  25.         [WebMethod(Description="獲取時間")]  
  26.         publicstring GetDate()  
  27.         {  
  28.             return
     DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");  
  29.         }  
  30.     }  
  31. }  

服務建立後,在瀏覽器中輸入服務地址,可以看到如下圖所示。


2 通過Visual Studio新增服務引用

通過Visual Studio新增服務引用相當方便,只需要在Visual Studio中選擇新增服務引用,便可以生成代理類,在專案中通過代理呼叫服務,如下圖所示。


新增服務引用以後,在專案解決方案中多了Service References和app.config,如下圖所示。

ServiceReference1就是上面新增的服務,app.config是服務的配置檔案,app.config裡面的配置大致如下,當服務地址改變時,修改endpoint裡的address即可。

  1. <!--app.config檔案配置-->
  2. <?xmlversion="1.0"encoding="utf-8"?>
  3. <configuration>
  4.     <configSections>
  5.     </configSections>
  6.     <system.serviceModel>
  7.         <bindings>
  8.             <basicHttpBinding>
  9.                 <bindingname="Service1Soap"closeTimeout="00:01:00"openTimeout="00:01:00"
  10.                     receiveTimeout="00:10:00"sendTimeout="00:01:00"allowCookies="false"
  11.                     bypassProxyOnLocal="false"hostNameComparisonMode="StrongWildcard"
  12.                     maxBufferSize="65536"maxBufferPoolSize="524288"maxReceivedMessageSize="65536"
  13.                     messageEncoding="Text"textEncoding="utf-8"transferMode="Buffered"
  14.                     useDefaultWebProxy="true">
  15.                     <readerQuotasmaxDepth="32"maxStringContentLength="8192"maxArrayLength="16384"
  16.                         maxBytesPerRead="4096"maxNameTableCharCount="16384"/>
  17.                     <securitymode="None">
  18.                         <transportclientCredentialType="None"proxyCredentialType="None"
  19.                             realm=""/>
  20.                         <messageclientCredentialType="UserName"algorithmSuite="Default"/>
  21.                     </security>
  22.                 </binding>
  23.             </basicHttpBinding>
  24.         </bindings>
  25.         <client>
  26.             <endpointaddress="http://localhost:19951/Service1.asmx"binding="basicHttpBinding"
  27.                 bindingConfiguration="Service1Soap"contract="ServiceReference1.Service1Soap"
  28.                 name="Service1Soap"/>
  29.         </client>
  30.     </system.serviceModel>
  31. </configuration>

客戶端呼叫WebService
  1. //呼叫服務,結果如圖所示。
  2. staticvoid Main(string[] args)  
  3. {  
  4.     ServiceReference1.Service1SoapClient client = new ServiceReference1.Service1SoapClient();  
  5.     //呼叫服務的HelloWorld方法
  6.     string hello = client.HelloWorld();  
  7.     Console.WriteLine("呼叫服務HelloWorld方法,返回{0}", hello);  
  8.     //呼叫服務的Add方法
  9.     int a = 1, b = 2;  
  10.     int add = client.Add(a, b);  
  11.     Console.WriteLine("呼叫服務Add方法,{0} + {1} = {2}", a, b, add);  
  12.     //呼叫服務的GetDate方法
  13.     string date = client.GetDate();  
  14.     Console.WriteLine("呼叫服務GetDate方法,返回{0}", date);  
  15.     Console.ReadKey();  
  16. }  


  1. using System;  
  2. using System.CodeDom;  
  3. using System.CodeDom.Compiler;  
  4. <