定义服务契约-创建宿主程序-创建客户端程序访问服务

namespace HelloService
{
/// <summary>
/// 服务契约
/// </summary>
[ServiceContract]
public interface IHelloService
{
/// <summary>
/// 服务操作
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[OperationContract]
string SayHello(string name);
}
}

类HelloService继承接口IHelloService

namespace HelloService
{
public class HelloService:IHelloService
{
/// <summary>
/// 打招呼
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string SayHello(string name)
{
return name + ":say hello!";
}
}
}

定义一个客户端

namespace HelloClient
{
class Program
{
static void Main(string[] args)
{
using (HelloProxy proxy=new HelloProxy())
{
Console.WriteLine(proxy.Say("KAKA"));
Console.Read();
}
}
}
/// <summary>
/// 硬编码服务契约
/// </summary>
interface IService
{
/// <summary>
/// 服务操作
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[OperationContract]
string Say(string name);
} /// <summary>
/// 客户端代理类型
/// </summary>
class HelloProxy : ClientBase<HelloService.IHelloService>, IService
{
/// <summary>
/// 硬编码定义绑定
/// </summary>
public static readonly Binding HelloBinding = new NetNamedPipeBinding(); public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello")); public HelloProxy() : base(HelloBinding, HelloAddress) { } public string Say(string name)
{
//使用Channel属性对服务进行调用
return Channel.SayHello(name);
} }
}

宿主程序

namespace HelloServiceHost
{
class Program
{
static void Main(string[] args)
{
using (MyHelloHost host=new MyHelloHost())
{
host.Open();
Console.Read();
}
}
}
public class MyHelloHost:IDisposable
{
/// <summary>
/// 定义一个服务对象
/// </summary>
private ServiceHost _myHost; public ServiceHost MyHost
{
get { return _myHost; }
set { _myHost = value; }
} /// <summary>
/// 定义一个基地址
/// </summary>
public const string BaseAddress = "net.pipe://localhost"; /// <summary>
/// 可选地址
/// </summary>
public const string HelloServiceAddress = "Hello"; /// <summary>
/// 服务契约实现类型
/// </summary>
public static readonly Type ServiceType=typeof(HelloService.HelloService); /// <summary>
/// 服务契约接口
/// </summary>
public static readonly Type ContractType=typeof(HelloService.IHelloService); /// <summary>
/// 服务定义一个绑定
/// </summary>
public static readonly Binding helloBinding = new NetNamedPipeBinding(); /// <summary>
/// 构造服务对象
/// </summary>
protected void CreateHelloService()
{
//创建服务对象
_myHost = new ServiceHost(ServiceType, new Uri[] { new Uri(BaseAddress)});
//给当前数组对象添加终结点
_myHost.AddServiceEndpoint(ContractType, helloBinding, HelloServiceAddress);
}
/// <summary>
/// 打开服务
/// </summary>
public void Open()
{
Console.WriteLine("开始启动服务!");
_myHost.Open();
Console.WriteLine("服务已经启动!");
}
/// <summary>
/// 构造方法
/// </summary>
public MyHelloHost()
{
CreateHelloService();
}
/// <summary>
/// 销毁对象
/// </summary>
public void Dispose() {
if (_myHost!=null)
{
(_myHost as IDisposable).Dispose();
}
}
}
}

要先启动服务HelloServiceHost

再启动客户端

最新文章

  1. 借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘
  2. inline-block和float
  3. CodeViz代码可视化
  4. 上传图片shell绕过过滤的几种方法
  5. Educational Codeforces Round 16 A B C E
  6. shellKali Linux Web 渗透测试— 初级教程(第三课)
  7. YII CDbCriteria总结
  8. 多线程程序 怎样查看每个线程的cpu占用
  9. Apple Watch 1.0 开发介绍 2.1 WatchKit Apps UI要点
  10. HTML干货
  11. koa2+webSocket 聊天室
  12. 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应
  13. Emacs 自动补全插件 ycmd
  14. Key in_hidden/batch_normalization/beta not found in checkpoint
  15. Centos7.2 Install subversion server
  16. Linux设备驱动剖析之IIC(三)
  17. Patchwork(2013年)--CNV检测方法流程
  18. oracle connect nocycle
  19. Java连接Oracle数据库示例
  20. 在pycharm中使用scrapy爬虫

热门文章

  1. Flume1.5.0入门:安装、部署、及flume的案例
  2. double类型保留2位小数
  3. imx6 ar8031 千兆网卡不能用
  4. PHP 正则表达式 及常用汇总
  5. C++函数的高级特性
  6. 【Java面试题】21 Java中的异常处理机制的简单原理和应用。
  7. win7在64位系统下编译openssl
  8. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
  9. CPU性能判断指标---上下文切换,运行队列和使用率
  10. C#_获取汉字拼音