黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

使用WCF進行跨平臺開發(fā)之一(WCF的實現(xiàn)、控制臺

系統(tǒng) 1962 0

WCF是Windows Communication Foundation的縮寫,是微軟發(fā)展的一組數(shù)據(jù)通信的應(yīng)用程序開發(fā)接口,它是.NET框架的一部分,是WinFx的三個重要開發(fā)類庫之一,其它兩個是WPF和WF。在本系列文章

(我現(xiàn)在計劃的應(yīng)該是三篇,一篇WCF的開發(fā)和部署,另外是在.net平臺上調(diào)用它,第二篇是PHP調(diào)用,第三篇是J AVA調(diào)用)。

在本次的跨平臺集成通信開發(fā)示例中,使用到的各種技術(shù),咱且走且看,一邊開發(fā)一邊講解。

1.創(chuàng)建項目結(jié)構(gòu)

使用VS2010一個名為IntergatedCommunication的空解決方案,在其下,新建Contracts、Implemention兩個類庫項目,分別為契約的設(shè)計與服務(wù)的實現(xiàn),而后新建ConsoleHost、Client兩個控制臺應(yīng)用程序,分別為在控制臺中實現(xiàn)服務(wù)托管使用,一個作為.net平臺上調(diào)用WCF的實例使用,如下圖

image

2.契約的設(shè)計

本實例我還是想讓它確實可以應(yīng)用在實際項目中,所以我在設(shè)計的時候,將使用復雜類型(complex type),因為這并不同于普通類型,尤其在java和php在使用復雜類型參數(shù)是,調(diào)用方法是很不一樣的。

首先對Contracts、Implemention和ConsoleHost項目中添加對System.ServiceModel和System.Runtime.Serialization的引用。這兩個命名空間中包含ServiceContractAttribute等WCF需要的契約特性類,和對復雜類型序列化的類DataContractSerializer。

image

本示例使用員工信息(員工ID、員工姓名、所屬部門)查詢本員工上月的工資明細(員工ID、薪水、日期),所以首先建立兩個類Employee類和SalaryDetail類,在類中引用System.Runtime.Serialization命名空間,并且,在類上添加DataContractAttribute并在每個類屬性上添加DataMemberAttribute:

Employee.cs

        
          using
        
         System.Runtime.Serialization;
      
      
        
          namespace
        
         Contracts
      
        {
      
            [DataContract]
      
        
          public
        
        
          class
        
         Employee
      
            {
      
                [DataMember]
      
        
          public
        
        
          string
        
         Id { get; set; }
      
                [DataMember]
      
        
          public
        
        
          string
        
         Name { get; set; }
      
                [DataMember]
      
        
          public
        
        
          string
        
         Department { get; set; }
      
            }
      
        }
      
SalaryDetail.cs
        
          using
        
         System.Runtime.Serialization;
      
      
        
          namespace
        
         Contracts
      
        {
      
            [DataContract]
      
        
          public
        
        
          class
        
         SalaryDetail
      
            {
      
                [DataMember]
      
        
          public
        
        
          string
        
         Id { get; set; }
      
                [DataMember]
      
        
          public
        
        
          decimal
        
         Salary { get; set; }
      
                [DataMember]
      
        
          public
        
         DateTime Date { get; set; }
      
            }
      
        }
      
以上所設(shè)計的是數(shù)據(jù)契約,在使用DataContract和DataMember修飾和類和屬性后,可將這些類型和屬性暴露在元數(shù)據(jù)中,而后設(shè)計服務(wù)契約
定義一個借口名為IEmployeeManagement并添加一個方法簽名GetSalaryOfLastMonth,并添加ServiceContractAttribute和OperationContractAttribute。
IEmployeeManagement.cs
        
          using
        
         System.ServiceModel;
      
      
        
          namespace
        
         Contracts
      
        {
      
            [ServiceContract]
      
        
          public
        
        
          interface
        
         IEmployeeManagement
      
            {
      
                [OperationContract]
      
                SalaryDetail GetSalaryOfLastMonth(Employee emp);
      
            }
      
        }
      

3.實現(xiàn)服務(wù)

在Implemention中添加對Contracts項目的引用,添加EmployeeManagement類,實現(xiàn)IEmployeeManagement接口

EmployeeManagement.cs

        
          using
        
         Contracts;
      
      
        
          namespace
        
         Implemention
      
        {
      
        
          public
        
        
          class
        
         EmployeeManagement:IEmployeeManagement
      
            {
      
        
          public
        
         SalaryDetail GetSalaryOfLastMonth(Employee emp)
      
                {
      
                    SalaryDetail salaryDetail = 
        
          new
        
         SalaryDetail();
      
                    salaryDetail.Id = emp.Id;
      
                    salaryDetail.Date = DateTime.Now.AddMonths(-1);
      
                    salaryDetail.Salary = 20000;
      
        
          return
        
         salaryDetail;
      
                }
      
            }
      
        }
      
因為這里實現(xiàn)的內(nèi)容并不重要,所以沒有具體的去實現(xiàn)它,知識簡單的返回了一個SalaryDetail的實例,Id為傳入?yún)?shù)的員工ID,時間為當前時間的前一個月,薪水為固定的20000。

4.控制臺托管服務(wù)

在ConsoleHost中添加對以上兩個項目的引用,這時,生成整個解決方案,然后在ConsoleHost中添加應(yīng)用程序配置文件App.config。并使用WCF服務(wù)配置編輯器打開它,并配置服務(wù)托管地址和綁定類型等信息,最終配置結(jié)果為

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="utf-8"
        
         ?
        
          >
        
      
        
          <
        
        
          configuration
        
        
          >
        
      
        
          <
        
        
          system.serviceModel
        
        
          >
        
      
        
          <
        
        
          behaviors
        
        
          >
        
      
        
          <
        
        
          serviceBehaviors
        
        
          >
        
      
        
          <
        
        
          behavior
        
        
          name
        
        
          ="ExposeMetaDataBehavior"
        
        
          >
        
      
        
          <
        
        
          serviceMetadata
        
        
          httpGetEnabled
        
        
          ="true"
        
        
          httpGetUrl
        
        
          ="EmployeeManagement/MEX"
        
        
          />
        
      
        
          </
        
        
          behavior
        
        
          >
        
      
        
          </
        
        
          serviceBehaviors
        
        
          >
        
      
        
          </
        
        
          behaviors
        
        
          >
        
      
        
          <
        
        
          services
        
        
          >
        
      
        
          <
        
        
          service
        
        
          behaviorConfiguration
        
        
          ="ExposeMetaDataBehavior"
        
        
          name
        
        
          ="Implemention.EmployeeManagement"
        
        
          >
        
      
        
          <
        
        
          endpoint
        
        
          address
        
        
          ="EmployeeManagement"
        
      
        
          binding
        
        
          ="wsHttpBinding"
        
        
          bindingConfiguration
        
        
          =""
        
        
          contract
        
        
          ="Contracts.IEmployeeManagement"
        
        
          />
        
      
        
          <
        
        
          host
        
        
          >
        
      
        
          <
        
        
          baseAddresses
        
        
          >
        
      
        
          <
        
        
          add
        
        
          baseAddress
        
        
          ="http://localhost:9876/"
        
        
          />
        
      
        
          </
        
        
          baseAddresses
        
        
          >
        
      
        
          </
        
        
          host
        
        
          >
        
      
        
          </
        
        
          service
        
        
          >
        
      
        
          </
        
        
          services
        
        
          >
        
      
        
          </
        
        
          system.serviceModel
        
        
          >
        
      
        
          </
        
        
          configuration
        
        
          >
        
      

打開program.cs,在main方法中添加代碼,托管服務(wù)

        
          using
        
         System.ServiceModel;
      
        
          using
        
         Implemention;
      
      
        
          namespace
        
         ConsoleHost
      
        {
      
        
          class
        
         Program
      
            {
      
        
          static
        
        
          void
        
         Main(
        
          string
        
        [] args)
      
                {
      
                    ServiceHost host = 
        
          new
        
         ServiceHost(
        
          typeof
        
        (Implemention.EmployeeManagement));
      
        
          try
        
      
                    {
      
                        Console.WriteLine(
        
          "EmployeeManagement Service Starting"
        
        );
      
                        host.Open();
      
                        Console.WriteLine(
        
          "EmployeeManagement Service Started"
        
        );
      
                        Console.ReadKey();
      
                    }
      
        
          catch
        
         (Exception ex)
      
                    {
      
                        Console.WriteLine(ex.Message);
      
        
          if
        
         (ex.InnerException != 
        
          null
        
        )
      
                        {
      
                            Console.WriteLine(
        
          "\n"
        
         + ex.InnerException.Message);
      
                        }
      
                    }
      
        
          finally
        
      
                    {
      
                        host.Close();
      
                    }
      
                    Console.ReadKey();
      
                }
      
            }
      
        }
      

生成解決方案,并在VS外以管理員權(quán)限啟動ConsoleHost.exe文件,這樣就在控制臺中托管了服務(wù)

5.在.net平臺中調(diào)用WCF

在Client中,添加服務(wù)引用,命名空間設(shè)置為ServiceReference

image

在program.cs中添加代碼,調(diào)用控制臺中托管的服務(wù)

        
          namespace
        
         Client
      
        {
      
        
          class
        
         Program
      
            {
      
        
          static
        
        
          void
        
         Main(
        
          string
        
        [] args)
      
                {
      
                    ServiceReference.EmployeeManagementClient client = 
        
          new
        
         ServiceReference.EmployeeManagementClient();
      
                    ServiceReference.Employee emp = 
        
          new
        
         ServiceReference.Employee() { Id = 
        
          "dev001"
        
        , Name = 
        
          "James White"
        
        , Department = 
        
          "Development"
        
         };
      
                    ServiceReference.SalaryDetail salaryDetail = client.GetSalaryOfLastMonth(emp);
      
                    Console.WriteLine(
        
          "Employee number {0}'s salary of {1} month is ¥{2}"
        
        , salaryDetail.Id, salaryDetail.Date.Month, salaryDetail.Salary);
      
                    Console.ReadKey();
      
                }
      
            }
      
        }
      
image

在這里,我們已經(jīng)簡單的實現(xiàn)了WCF服務(wù)的實現(xiàn)和.net本平臺調(diào)用WCF,這一篇不是最重要的,下一篇是使用IIS托管WCF并使用PHP調(diào)用WCF。

使用WCF進行跨平臺開發(fā)之一(WCF的實現(xiàn)、控制臺托管與.net平臺的調(diào)用)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論