原文:点击打开链接
自己对照做的demo: 点击打开链接
WcfServiceLib - 服务契约的实现; *ConsoleHost工程 – Wcf宿主; *ConsoleClient工程 - Wcf客户端
- 创建WcfServiceLib工程(选WCF Service Library工程模板: VS为我们自动添加一个IService1.cs和Service1.cs)
- Host工程里引用WcfServiceLib工程
- 将WcfServiceLib里App.config移动到ConsoleHost工程里,删掉Lib工程里的App.config
- Host工程的Program.cs添加下面的代码,右击Builder工程
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.ServiceModel;
- using WcfServiceLib;
- namespace WCFStudy2ConsoleHost
- {
- class Program
- {
- static void Main(string[] args)
- {
- using(var host = new ServiceHost(typeof(Service1)))
- {
- host.Open();
- Console.WriteLine("Service start.");
- Console.Read();
- }
- }
- }
- }
- 运行 ConsoleHost工程 bin/debug 下面的 exe(这一步是为了生成客户端代理,需要启动Host)
- 在Client工程里通过添加 Service References,生成客户端Proxy,关闭exe
- 在Client工程的Program.cs里添加如下代码。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace WCFStudy2ConsoleClient
- {
- class Program
- {
- static void Main(string[] args)
- {
- MyWcfSvc.Service1Client client = new MyWcfSvc.Service1Client();
- var result = client.GetData(123);
- Console.WriteLine(result);
- Console.Read();
- }
- }
- }
- F5 运行Solution里的Host, 再右击Client工程选Debug的Start new instance方式,运行Client
运行结果:
由于ServiceHost实例是被创建在应用程序域中,必须保证宿主进程在调用服务期间不会被关闭,因此利用Console.Read()来阻塞进程,以使得控制台应用程序能够一直运行,直到人为关闭应用程序。