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

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. 重要:C/C++变量的自动初始化

    对于内置变量的自动初始化 代码1: #include<stdio.h> #define CONST 100 int *p1; ]; int b; static int c; main() ...

  2. spring 优点

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  3. [转]MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题

    问题描述: 从一台Linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.x ...

  4. AsyncTask执行顺序

    这几天,遇见个奇葩问题,记录一下. 在用AsyncTask的时候,new 出来的AsyncTask总是等了很久才执行到. 于是乎,想到了是不是前面已经有好几个AsyncTask的实例了,是不是线程优先 ...

  5. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  6. erlang的catch和 try catch的初步猜测

    一. catch(Fun):似乎可以避免因为 函数Fun内的错误而造成的当前的进程的崩溃.

  7. <img/>标签onerror事件在IE下的bug和解决方法

    IE下打开网页时,会弹出“Stack overflow at line: 0”的弹框.经分析,这个bug是由于img标签的onerror事件引起的.程序中用到的代码片段如下:正常情况下显示src所指路 ...

  8. jQuery继承extend用法详解

    /直接基于jQuery的扩展,判断是否为空 $.isBlank = function(obj){   return(typeof(obj)=='undefined'||obj==''||obj==nu ...

  9. cesium可视化空间数据2

    圆柱圆锥体 <!DOCTYPE html> <html> <head> <!-- Use correct character set. --> < ...

  10. js简单的弹出框有关闭按钮

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...