WCF实现多个服务

本篇体验使用WCF实现2个服务。一个使用HTTP通讯,一个使用TCP通讯。

大致思路是:

→ 创建WCF服务以及接口,写2个接口
→ 实现2个接口
→ 为WCF创建一个控制台项目的宿主,配置App.config,开启宿主
→ 创建一个Web客户端,创建对WCF服务的引用
→ 在Web客户端,调用WCF服务,即调用WCF的代理类的实例方法

打开Visual Studio 2013,创建一个类库项目。

在类库下创建一个名称为"HelloServie"的WCF服务。随即,在项目中多了WCF相关的组件,以及自动创建了IHelloServie类和HelloServie类。

修改IHelloService接口如下:

namespace MyServices
{
    [ServiceContract]
    public interface IOneService
    {
        [OperationContract]
        string GetOne();
    }

    [ServiceContract]
    public interface ITwoService
    {
        [OperationContract]
        string GetTwo();
    }
}


HelloService类现在需要同时实现以上2个接口。

namespace MyServices
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“HelloServie”。
    public class HelloServie : IOneService, ITwoService
    {

        public string GetOne()
        {
            return "本条信息通过HTTP传递";
        }

        public string GetTwo()
        {
            return "本条信息通过TCP传递";
        }
    }
}

现在需要一个宿主。在当前解决方案下创建一个控制台项目。

添加对WCF所在类库的引用,添加对"System.ServiceModel"的引用。

设置控制台项目的配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
      <services>
        <!--name="命名空间名称.实现类名称"-->
        <service name="MyServices.HelloServie" behaviorConfiguration="mexBehaviour">
          <endpoint address="MyServices" binding="basicHttpBinding" contract="MyServices.IOneService">
          </endpoint>
          <endpoint address="MyServices" binding="netTcpBinding" contract="MyServices.ITwoService">
          </endpoint>
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:9090/"/>
              <add baseAddress="net.tcp://localhost:6060/"/>
            </baseAddresses>
          </host>
        </service>
      </services>

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

其中,

● 通过Service节点的behaviorConfiguration属性绑定behavior行为
● service节点的name属性值的格式是:"命名空间名称.实现类名称"
● endpoint一般包含"abc"三个属性,a代表address,b代表binding,c代表contract
● endpoint中的contract属性值的格式是:"命名空间名称.接口名称"

编写控制台项目如下:

using System.ServiceModel;
......

namespace MyHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(HelloServie)))
            {
                host.Open();
                Console.WriteLine("宿主已经开启,开启时间;" + DateTime.Now);
                Console.ReadKey();
            }
        }
    }
}

把控制台项目设置为启动项目,并启动控制台项目,即开启宿主。

现在需要客户端。开启一个新的Visual Studio解决方案。

创建一个空的,名称为"MyServiceClient"空网站。

一旦添加了对WCF服务的引用,在网站的Web.config中就自动多了system.serviceModel节点。

创建一个Web界面。

    <div>
        <asp:Button ID="Button1" runat="server" Text="获取通过HTTP通讯的信息" OnClick="Button1_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

        <br /><br />
        <asp:Button ID="Button2" runat="server" Text="获取通过TCP通讯的信息" OnClick="Button2_Click" />
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    </div>

编写按钮事件。

        //HTTP通讯信息
        protected void Button1_Click(object sender, EventArgs e)
        {

            MyServiceClient.MyService.OneServiceClient client = new MyService.OneServiceClient("BasicHttpBinding_IOneService");
            Label1.Text = client.GetOne();
        }

        //TCP通讯信息
        protected void Button2_Click(object sender, EventArgs e)
        {
            MyServiceClient.MyService.TwoServiceClient client = new MyService.TwoServiceClient("NetTcpBinding_ITwoService");
            Label2.Text = client.GetTwo();
        }

以上,声明OneServiceClient和TwoServiceClient实例时, 构造函数传递的实参值是Web.config中endpoint的name属性值。

点击页面上的2个按钮如下:

可见,一个WCF服务可实现多个服务。

时间: 2024-08-28 12:36:14

WCF实现多个服务的相关文章

WCF初探-13:WCF客户端为双工服务创建回调对象

前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务创建回调对象. 双工服务指定一个回调协定,客户端应用程序必须实现该协定以便提供一个该服务能够根据协定要求调用的回调对象.虽然回调对象不是完整的服务(例如,您无法使用回调对象启动一个通道),但是为了实现和配置,这些回调对象可以被视为一种服务. 双工服务的客户端必须: 实现一个回调协定类. 创建回调协定

调用WCF不需要添加服务引用,使用一个WCFHelper类就可以

效果图: 调用过程: string WCFURL = "http://localhost:100/Service1.svc"; UserRequest user = new UserRequest { UserName = UserName.Text, Address = Address.Text, Email = Email.Text }; string request = "{\"request\":" + new JavaScriptSer

WCF大文件传输服务

由于项目需要,自己写一个基于WCF的大文件传输服务雏形.觉得有一定的参考价值,因此放在网上分享. 目前版本为v1.1特点如下: 1.文件传输端口为18650 2.上传和下载文件 3.支持获取文件传输状态(未开始.传输中.传输完成.出现错误) 4.支持获取文件传输进度(范围0~1) 5.支持获取文件传输速度速度(按文件传输速度大小 自动切换 KB/s 和 MB/s显示) 项目解决方案如下: 服务断包括WCF寄宿的控制台服务和Windows 服务以及文件传输服务核心 公共包括一些帮助类(文件HASH

WCF初探-11:WCF客户端异步调用服务

前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码部分的执行,这时我们就需要考虑使用异步的方式来调用服务.注意这里的异步是完全针对客户端而言的,与WCF服务契约的方法是否异步无关,也就是在不改变操作契约的情况下,我们可以用同步或者异步的方式调用WCF服务. WCF客户端异步调用服务方式: 通过代理类异步调用服务.就需要通过使用事件驱动的异步调用模型

【WCF系列】(四)WCF客户端怎么消费服务

WCF客户端怎么消费服务 获取服务绑定协议.绑定和地址:实现方式 SvcUtil方式:SvcUtil.exe是一个命令行工具,位于:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin可以将SvcUtil.exe添加到VS中方便以后的运用 生成代理类: svcutil net.tcp://192.168.0.100:3333/ChatService /language:C# /out:proxy.cs /config:app.config

跟我一起学WCF(6)——深入解析服务契约[下篇]

一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代理类的方式来实现的.在这篇博文中将分享契约继承的实现. 二.WCF服务契约继承实现的限制 首先,介绍下WCF中传统实现契约继承的一个方式,下面通过一个简单的WCF应用来看看不做任何修改的情况下是如何实现契约继承的.我们还是按照之前的步骤来实现下这个WCF应用程序. 步骤一:实现WCF服务 在这里,我

使用C#创建及调用WCF完整实例 (Windows服务宿主)

关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此次教程之内 文章最后有本例的下载连接,包含源代码.说明教程.编译后文件 实例环境:Windows Server 2008 R2 + VS 2010(C#) 打开 VS 2010,选择 新建项目,选择 ”WCF”|”WCF 服务库 ”,注意这里是”WCF 服务库 ”,不是"WCF 服务应用程序&quo

WCF基础之配置服务

在WCF应用编程中配置服务是其主要部分. 配置可以定义和自定义如何向客户端公开服务,包括服务地址,发送和接受消息的传输和编码,以及服务的安全类型. 服务的配置有两种:编码和使用config文件,大多数是用配置文件进行配置. <system.serviceModel> <!--服务--> <services> <service> <host /> <endpoint/> </service> </services>

WCF 设计和实现服务协定

WCF 术语:? 消息 – 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头.? 服务 – 服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作.? 终结点 – 终结点是用来发送或接收消息(或执行这两种操作)的构造. 终结点包括一个定义消息可以发送到的目的地的位置(地址).一个描述消息应如何发送的通信机制规范(绑定)以及对于可以在该位置发送或接收(或两者皆可)的一组消息的定义(服务协定)- 该定义还描述了可以发送何种消息. – WCF 服务作为一个终