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服务可实现多个服务。
WCF实现多个服务的更多相关文章
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- WCF初探-13:WCF客户端为双工服务创建回调对象
前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...
- WCF大文件传输服务
由于项目需要,自己写一个基于WCF的大文件传输服务雏形.觉得有一定的参考价值,因此放在网上分享. 目前版本为v1.1特点如下: 1.文件传输端口为18650 2.上传和下载文件 3.支持获取文件传输状 ...
- 使用WCF实现SOA面向服务编程—— 架构设计
原文地址:http://www.cnblogs.com/leslies2/archive/2011/03/29/1997889.html SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就 ...
- WCF Restful Service的服务
构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...
- 【WCF系列】(四)WCF客户端怎么消费服务
WCF客户端怎么消费服务 获取服务绑定协议.绑定和地址:实现方式 SvcUtil方式:SvcUtil.exe是一个命令行工具,位于:C:\Program Files (x86)\Microsoft S ...
- WCF备忘录一:服务端实例的生命周期
示例代码下载地址:WCFDemo1Day 概述 客户端向WCF服务发出请求后,服务端会实例化一个Service对象(实现了契约接口的对象)用来处理请求,实例化Service对象以及维护其生命周期的方式 ...
- Wcf:可配置的服务调用方式
添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个.先看下面的图: 通常,如果采用.NET的WCF技 ...
- 跟我一起学WCF(6)——深入解析服务契约[下篇]
一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...
随机推荐
- bulk_write&Replace_one
ns=[]ns.append(ReplaceOne({'ip': ok['ip']}, ok, upsert=True))#更新插入 if len(ns) > 0: res = coll.bul ...
- 003_cd pushd popd三个命令的区别
一. It depends. In zsh you can configure cd to push the old directory on the directory stack automati ...
- Linux下创建软Raid
1- Linux下创建软Raid 步骤1.创建磁盘,并转换为fd #fdisk /dev/sdb //这里使用新的磁盘sdb 然后输入n ,创建分区 使用默认的起始点 输入大小为+100M 然后重 ...
- 数组的splice方法
splice 该方法向或者从数组中添加或者删除项目,返回被删除的项目,同时也会改变原数组. splice(index,howmany,item1,...itemX) index参数:必须,整数,规定添 ...
- ****CI和UEditor集成
百度UEditor是一款比较常用编辑器 下载地址: http://ueditor.baidu.com/website/download.html 1.在assets目录下建立ueditor文件夹,把下 ...
- Select查询语句1
一.语法结构 select[all|distinct]select_list from table_name[join join_condition] where search_condition g ...
- Linux系统运维笔记(四),CentOS 6.4安装Nginx
Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...
- linux系统下创建lvm挂载到指定目录
1 .背景 在企业中有时我们为方便安装软件.数据的管理,需要把安装软件.数据放到固定目录下,磁盘满了方便扩展,这里假如需要一个/data目录存放数据,并单独进行挂载. 2.操作步骤 2.1 划分磁盘 ...
- Codeforces 1088E Ehab and a component choosing problem
Ehab and a component choosing problem 如果有多个连接件那么这几个连接件一定是一样大的, 所以我们先找到值最大的连通块这个肯定是分数的答案. dp[ i ]表示对于 ...
- django 使用 request 获取浏览器发送的参数
django 使用 request 获取浏览器发送的参数 转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...