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. PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。

    赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...

  2. HIFI播放器--磨机吐槽篇

    最近看到淘宝店提供各种随身播放器磨机服务,说的是天花乱坠,给你更换零件, 甚至更改电路,搭载上去,是如何如何的好,整个播放器就上升了几个等次,收费还 不低,至少是好几百,我实在是忍不住吐槽了,你们这些 ...

  3. dtw算法优化(重写C语言版本)

    1.缩小搜索范围 2.降低内存消耗

  4. python to be linux daemon

    所需第三方库:python-daemon[https://pypi.python.org/pypi/python-daemon/] 使用方式: python linux_service.py star ...

  5. MySQL 四种事务隔离级的说明

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  6. [转]安装和使用JD-Eclipse插件

    JD-Core 是一个免费的库,从一个或多个“.class”文件中 重构Java源代码.JD-Core可以用来恢复丢失的源代码,并深究Java运行时类库.支持Java 5的功能:如注释,泛型或键入“枚 ...

  7. [转]Android 学习资料分享(2015 版)

    转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...

  8. mysql 删除重复数据保留只保留一条

    SELECT * FROM (SELECT addTime FROM motorcade.car_msg_info GROUP BY addTime HAVING COUNT(addTime) > ...

  9. DREAMWEAVER

    女孩儿!!!Coding之路,你没有什么不一样的!!!! 1024,程序员的节日,开会的时候,你对负责人说今天是我们的节日哎~~结果,得到的是负责人冷冰冰的眼神:“你还真把自己当程序员了!?” 一阵愣 ...

  10. 【linux】find删除指定时间之前的文件

    今天磁盘满了,想删掉一些老的日志文件.开始想写个python脚本,转念一想,可能shell脚本好点.结果发现,根本不用写脚本,一个find指令就可以解决问题了. 先上指令 -exec rm {} \; ...