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】引用。

C#创建一个简单的WCF程序并调用

 

 

 C#创建一个简单的WCF程序并调用

 [ServiceContract]//服务契约(仅仅对类、接口)
    public interface IUserinfoService
    {
        //这个契约相当于webService中的WebMethod
        [OperationContract]//操作契约
        int Add(int a, int b);
    }

2.然后在新建一个类库,并新建一个类【UserInfoService】,这个类添加子【IBLL】的引用。这个类实现【IUserInfoService】接口。

C#创建一个简单的WCF程序并调用

 public class UserInfoService: IUserinfoService
    {


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

    }

3.新建一个【控制台应用程序】,命名为【Host】。

C#创建一个简单的WCF程序并调用

 

 

 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.最后运行程序即可,只有程序运行客户端才能调用。

C#创建一个简单的WCF程序并调用

 

 

 7.测试:如果控制器已经成功运行,我们可以打打开浏览器输入服务地址:【http://localhost:8000/】,浏览器中会打开我们的服务页面,如果能正常显示,说明我们的服务已经启动成功,客户端可通过该地址访问我们的服务了。我们将创建一个客户端来访问我们的服务。

C#创建一个简单的WCF程序并调用

 

 

 

 

【调用服务-客户端】:第一种方法

1.在同一个解决方案下,新建一个【控制台应用程序】,然后我们使用微软提供的Svcutil工具生成FirstService服务的客户端代理类。可以在菜单中找到【VS2015的MSBuild命令提示符】/【VS2015开发人员命令提示】等工具,以管理员身份运行。

C#创建一个简单的WCF程序并调用

 

 

 2.跳转到我们需要在哪个文件加生成FirstService服务的客户端代理类。

切换到E盘:【e:】

切换目录:【cd: E:\面向服务通信技术\WCF_Server_1\WCF_Client】

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

C#创建一个简单的WCF程序并调用

 (执行成功后,会在解决方案目录下生成两个文件:userinfoServiceClientt.csoutout.config

3.我们可以将上面的3个文件夹展开,系统就会将隐藏的文件给显示出来。

C#创建一个简单的WCF程序并调用

 

这时我们右击隐藏的文件,点击【包含在项目中】即可。

 

 C#创建一个简单的WCF程序并调用

 

 

 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();

C#创建一个简单的WCF程序并调用

 

 

 

【调用服务-客户端】:第二种方法

这种方法跟WebService调用的方法一样~

1.在同一个解决方案下,新建一个【控制台应用程序】。然后添加【服务引用】

C#创建一个简单的WCF程序并调用

 

 

 2.然后输入服务地址,点击转到,可以看到有以下服务【UserinfoService】。然后点击确定即可。

C#创建一个简单的WCF程序并调用

 

 

 3.最后在【Program.cs】中的Main函数写以下代码。

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

            Console.WriteLine(sum.ToString());

            Console.ReadKey();

4.最后运行测试即可

C#创建一个简单的WCF程序并调用

C#创建一个简单的WCF程序并调用

上一篇:【译】ASP.NET Core Web APIs(四):教程:使用ASP.NET Core 创建一个Web API


下一篇:nginx TCP 代理& windows傻瓜式安装