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

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

再启动客户端

WCF(一) 创建第一个WCF的更多相关文章

  1. WCF学习系列一_创建第一个WCF服务

    原创作者:灰灰虫的家http://hi.baidu.com/grayworm WCF开发实战系列一:创建第一个WCF服务 在这个实战中我们将使用DataContract,ServiceContract ...

  2. WCF开发实战系列一:创建第一个WCF服务

    WCF开发实战系列一:创建第一个WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在这个实战中我们将使用DataContract,ServiceContract ...

  3. WCF入门教程2——创建第一个WCF程序

    本节目标 掌握接口 理解契约式编程 创建宿主程序 创建客户端程序访问服务 什么是接口 认识一下接口 必须知道的接口特性 接口不可以被实例化(常作为类型使用) 实现类必须实现接口的所有方法(抽象类除外) ...

  4. WCF开发实战系列一:创建第一个WCF服务 转

    转 http://www.cnblogs.com/poissonnotes/archive/2010/08/28/1811064.html 在这个实战中我们将使用DataContract,Servic ...

  5. 创建第一个WCF服务

    创建WCF服务 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序. 2.建立完成后如下图所示: 3.删除系统生成的两个文件IService1.cs与Service1.s ...

  6. 1.WCF学习--创建简单的WCF服务

    一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...

  7. 跟我一起学WCF(4)——第一个WCF程序

    一.引言 前面几篇文章分享了.NET 平台下其他几种分布式技术,然而前面几种分布式技术专注于某一特定的领域,并且具有不同编程接口,这使得开发人员需要掌握多个API的使用.基于这样的原因,微软在.NET ...

  8. 建立第一个wcf程序

    使用管理员权限启动vs (否者将导致ServiceHost开启失败 权限不足) 1.创建一个空的控制台程序 2.添加程序集引用 System.ServiceModel 3.写入一些代码 如下 usin ...

  9. 如何建立一个WCF服务并将其发布到IIS上

    在我们的软件开发中,经常会连接到数据库中,如果是常规的操作,我们经常会将连接数据库的字符串写在配置文件中,然后去读取数据库的连接字符串,其实这种方式是非常不科学的,这会直接暴露我们的数据库,直接暴露我 ...

随机推荐

  1. StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(一)准备工作

    原文地址:http://blog.starrtc.com/?p=48 啥也不说,先来个视频看看效果 视频播放器     00:00   00:54     概述为了体现StarRTC的实时音视频传输能 ...

  2. Javascript函数声明与函数表达式的区别

    在定义函数时,我们一般使用下面这两种方法: 使用函数声明定义: 1 2 3 function  sum (a, b) {     return a + b; } 使用函数表达式定义: 1 2 3 va ...

  3. 数据库之“on”“where”区别

    数据库在通过连接两张或者多张表返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户 在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的 ...

  4. V4L2编程 视频采集-范例

    http://linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/v4l2spec/: http://blog.csdn.net/kangear ...

  5. VMWare -- 工作模式

    VMWare提供三种工作模式桥接(bridge).NAT(网络地址转换)和host-only(主机模式). 桥接模式 在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和 ...

  6. 小知识(class文件查看jdk版本,beyond,could not find setter)

    最近几天工作当中遇到了一些问题,所以记录下来. 1.如何查看class文件的sdk版本 2.beyond compare比对文件 3.Could not find setter for native_ ...

  7. 【Java面试题】25 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

    如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取. 当应用程序在对象上调用了一个需要花费很长时间 ...

  8. path与classpath的差别

    1.path的作用     path是系统用来指定可运行文件的完整路径.即使不在path中设置JDK的路径也可运行JAVA文件,但必须把完整的路径写出来,如C:\Program Files\Java\ ...

  9. Oracle 11gR2 11.2.0.1 ( 11.2.0.1的BUG?):ohasd不能正常启动:ioctl操作:npohasd的问题:【chmod a+wr /var/tmp/.oracle/npohasd】

    问题1:执行安装,编译成功后,执行asmca时,失败,无法成功创建后台相关服务 问题2:os系统重启后,ohasd无法正常启动,css服务失败 原因:11.2.0.1的BUG:/var/tmp/.or ...

  10. mysql数据库中的存储引擎是什么意思呢

    需求描述: 在看mysql的内容,经常提到存储引擎,那么到底什么是存储引擎呢 在这里对于概念进行理解,记录下. 概念解释: 存储引擎(storage engine):存储引擎就是mysql中的一个组件 ...