1. 程式人生 > WINDOWS開發 >C#建立一個簡單的WCF程式並呼叫

C#建立一個簡單的WCF程式並呼叫

1.什麼是WCF

Windows Communication Foundation(WCF)是由微軟開發的一系列支援資料通訊的應用程式框架,可以翻譯為Windows 通訊開發平臺。整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。是Windows平臺上開發分散式應用最佳的實踐方式。

2.WCF基本概念

地址:定義服務的地址
繫結:定義服務的通訊方式(傳輸協議、編碼方案)
契約:定義服務的具體實現
終結點:由地址、繫結和契約共同構成一個終結點,伺服器通過終結點向客戶端公開服務,客戶端通過終結點呼叫服務。

【服務提供端】

下面通過簡單的服務例項來了解WCF?

1.首先新建一個專案,然後新建一個類庫【IBLL】,在類庫中新建一個介面【IUserInfoService】。並新增【System.ServiceMode】引用。

技術分享圖片

技術分享圖片

 [ServiceContract]//服務契約(僅僅對類、介面)
    public interface IUserinfoService
    {
        //這個契約相當於webService中的WebMethod
        [OperationContract]//操作契約
        int Add(int a,int b);
    }

2.然後在新建一個類庫,並新建一個類【UserInfoService】,這個類新增子【IBLL】的引用。這個類實現【IUserInfoService】介面。

技術分享圖片

 public class UserInfoService: IUserinfoService
    {


        public int Add(int a,int b)
        {
            return a + b;
        }

    }

3.新建一個【控制檯應用程式】,命名為【Host】。

技術分享圖片

4.然後在【App.config】中進行配置。

server節點中的name是具體服務的實現,我們具體服務的實現時BLL層中的UserInfoService。還需要在baseAddress中配置服務的地址。最後配置服務的契約,在contract屬性中配置服務契約,契約是IBLL層中的IuserInfoService介面契約。如果過需要配置多個服務,在services節點中繼續配置service節點即可。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      
      
      <!--name:具體服務的實現
      behaviorConfiguration:服務行為的配置
      -->
      <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
          <!--服務的地址-->
            <add baseAddress="http://localhost:8000/"/>
         </baseAddresses>
        </host>
         <!--服務契約-->
        <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserinfoService"></endpoint>
      </service>

    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfiguration">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

5.在【Program.cs】的Main函式中編寫程式碼,在這裡也需要新增對ServiceModel的引用。

using (ServiceHost host=new ServiceHost(typeof(BLL.UserInfoService)))
            {
                //開啟服務
                host.Open();
                Console.WriteLine("服務開啟成功!");
                Console.ReadKey();
//關閉服務
          host.close(); }

6.最後執行程式即可,只有程式執行客戶端才能呼叫。

技術分享圖片

7.測試:如果控制器已經成功執行,我們可以打開啟瀏覽器輸入服務地址:【http://localhost:8000/】,瀏覽器中會開啟我們的服務頁面,如果能正常顯示,說明我們的服務已經啟動成功,客戶端可通過該地址訪問我們的服務了。我們將建立一個客戶端來訪問我們的服務。

技術分享圖片

【呼叫服務-客戶端】:第一種方法

1.在同一個解決方案下,新建一個【控制檯應用程式】,然後我們使用微軟提供的Svcutil工具生成FirstService服務的客戶端代理類。可以在選單中找到【VS2015的MSBuild命令提示符】/【VS2015開發人員命令提示】等工具,以管理員身份執行。

技術分享圖片

2.跳轉到我們需要在哪個檔案加生成FirstService服務的客戶端代理類。

切換到E盤:【e:】

切換目錄:【cd: E:\面向服務通訊技術\WCF_Server_1\WCF_Client】

然後輸入以下命令:svcutil http://localhost:8000/?wsdl /o:userinfoServiceClientt.cs

技術分享圖片

(執行成功後,會在解決方案目錄下生成兩個檔案:userinfoServiceClientt.csoutout.config

3.我們可以將上面的3個資料夾展開,系統就會將隱藏的檔案給顯示出來。

技術分享圖片

這時我們右擊隱藏的檔案,點選【包含在專案中】即可。

技術分享圖片

4.然後將這個當前自帶的【App.config】的檔案刪除,將【output.config】檔案重新命名為【App.config】介面。我們需要在【WCF_Client】新增對ServiceModel的引用。最後在【Program.cs】中的Main函式寫以下程式碼。

UserinfoServiceClient client = new UserinfoServiceClient();
            Console.WriteLine(client.Add(10,20));
            Console.ReadKey();

技術分享圖片

【呼叫服務-客戶端】:第二種方法

這種方法跟WebService呼叫的方法一樣~

1.在同一個解決方案下,新建一個【控制檯應用程式】。然後新增【服務引用】

技術分享圖片

2.然後輸入服務地址,點選轉到,可以看到有以下服務【UserinfoService】。然後點選確定即可。

技術分享圖片

3.最後在【Program.cs】中的Main函式寫以下程式碼。

 ServiceReference.UserinfoServiceClient client = new ServiceReference.UserinfoServiceClient();
            int sum=client.Add(10,20);

            Console.WriteLine(sum.ToString());

            Console.ReadKey();

4.最後執行測試即可

技術分享圖片