public class ServiceImp : IService1,IService2,IService3
{
public string SayHelloA()
{
return "你好,这是第一个服务协定。";
} public string SayHelloB()
{
return "你好,这是第二个服务协定。";
} public string SayHelloC()
{
return "你好,这是第三个服务协定。";
}
} [ServiceContract]
public interface IService1
{
[OperationContract]
string SayHelloA();
} [ServiceContract]
public interface IService2
{
[OperationContract]
string SayHelloB();
} [ServiceContract]
public interface IService3
{
[OperationContract]
string SayHelloC();
}

使用代码的方式:

using (ServiceHost host = new ServiceHost(typeof(ServiceImp)))
{
host.AddServiceEndpoint(typeof (IService1), new WSHttpBinding(), "http://127.0.0.1:8888/service1");
host.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "http://127.0.0.1:8888/service2");
host.AddServiceEndpoint(typeof(IService3), new WSHttpBinding(), "http://127.0.0.1:8888/service3");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:8888/service"); //httpGetUrl客户端引用的地址
host.Description.Behaviors.Add(behavior);
host.Opened += delegate
{
MessageBox.Show("Service2已经启动");
};
host.Open();
}

使用配置文件的方式:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!--httpGetUrl客户端引用的地址-->
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/service"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WindowsFormsApplication2.ServiceImp" behaviorConfiguration="serviceBehavior">
<endpoint address="http://127.0.0.1:8888/service1" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService1"></endpoint>
<endpoint address="http://127.0.0.1:8888/service2" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService2"></endpoint>
<endpoint address="http://127.0.0.1:8888/service3" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService3"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
   using (ServiceHost host = new ServiceHost(typeof(ServiceImp)))
{
host.Opened += delegate
{
MessageBox.Show("Service2已经启动");
};
host.Open();
}

重温WCF之一个服务实现多个契约(二)的更多相关文章

  1. WCF 服务的ABC之契约(七)

    契约 Contract WCF的所有服务都会公开为契约(Contract),契约与平台无关,是描述服务功能的标注方式. 服务契约(Service Contract) 服务契约描述的是一个服务,它定义了 ...

  2. WCF初探-10:WCF客户端调用服务

    创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...

  3. 跟我一起学WCF(11)——WCF中队列服务详解

    一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...

  4. 真实世界:使用WCF扩展记录服务调用时间

    WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服 ...

  5. WCF入门(三)---WCF与Web服务/Web Service

    下面列出了WCF和Web服务之间存在一些重大差异. 属性:WCF服务是通过定义ServiceContract和OperationContract属性,而在Web服务,WebService和WebMet ...

  6. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

  7. 使用WCF扩展记录服务调用时间

    随笔- 64  文章- 0  评论- 549  真实世界:使用WCF扩展记录服务调用时间   WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Lay ...

  8. WCF心跳判断服务端及客户端是否掉线并实现重连接

    WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...

  9. WCF系列教程之WCF客户端调用服务

    1.创建WCF客户端应用程序需要执行下列步骤 (1).获取服务终结点的服务协定.绑定以及地址信息 (2).使用该信息创建WCF客户端 (3).调用操作 (4).关闭WCF客户端对象 二.操作实例 1. ...

随机推荐

  1. 一起入门python5之for循环

    昨天中午本来写了的,结果手贱了一下ctrl+x以后又去复制了别的东西.结果所有写的都没有了.蛋疼.继续写吧.今天来说for循环即条件判断>>> age = 20        #首先 ...

  2. OpenCV加载图像并显示

    从文件中读取一直一张图片,并加载出来 代码: #include "stdafx.h" #include "iostream" using namespace s ...

  3. caffe学习系列(1):图像数据转换成db(leveldb/lmdb)文件

    参考:http://www.cnblogs.com/denny402/p/5082341.html 上述博文用caffe自带的两张图片为例,将图片转为db格式.博主对命令参数进行了详细的解释,很赞. ...

  4. (原创)android中使用相机的两种方式

    在社交类应用或扫描二维码的场合都需要用到手机上的摄像头 在程序中启用这一硬件主要有两类方法 1.发送intent启动系统自带的摄像应用 此应用的AndroidManifest中的intent-filt ...

  5. linux下使用ffmpeg将amr转成mp3

    说明:AMR格式是智能手机上的常用音频文件格式,比MP3格式的压缩比大.同样时长的AMR文件大概是MP3的十分之一,所以在移动互联项目中应用比较广泛.但目前AMR格式在个人电脑上应用较少,所以目前大部 ...

  6. Delphi 中的 procedure of object

    转载:http://www.cnblogs.com/ywangzi/archive/2012/08/28/2659811.html 总结:TMyEvent = procedure of object; ...

  7. div元素抓取

    var files = $(".button").find("input[type='image']"); files.each(function() { $( ...

  8. ubuntu update dns server

    edit:  /etc/resolvconf/resolv.conf.d/base nameserver 114.114.114.114 execute this: $ resolvconf -u f ...

  9. 【自动部署】Ansible 怎么通过堡垒机/跳板机 访问目标机器

    Ansible机器的 /root/.ssh/config 配置如下即可:Host 目标机器IP User root IdentityFile=/root/.ssh/xxx_id_rsa ProxyCo ...

  10. Interleaving Positive and Negative Numbers

    Given an array with positive and negative integers. Re-range it to interleaving with positive and ne ...