【IT168 技术文档】Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。
在这个练习中,我们要把第一个练习中定义和实现的服务运行起来。更具体地说,我们会以一个.NET控制台程序为宿主程序来运行服务。
以类似Windows服务之类的应用程序为宿主程序来运行WCF服务通常很有用。这样在布署和管理WCF服务时就不必依赖外部的宿主程序,比如IIS。
在解决方案中添加一个控制台应用程序
宿主程序是一个简单的控制台应用程序。在这个任务中,我们将在解决方案中添加一个控制台应用程序,并给它添加成为WCF服务的宿主程序所需引用的程序集。
1. 选择File | Add | New Project菜单项。
2. 在New Project对话框中的Project Types部分选择Visual C# | Windows | Console Application。
3. 在Name文本框中输入Host,如图1所示。

图1 Add New Project对话框
4. 单击OK按钮。
5. 选择File | Save All菜单项。
添加对WCF的引用
6. 在Solution Explorer中Host项目的References文件夹上按鼠标右键并选择Add Reference菜单项。
7. 在.NET选项卡中选择System.ServiceModel。
8. 单击OK按钮。
添加对服务项目的引用
9. 在Solution Explorer中Host项目的References文件夹上按鼠标右键并选择Add Reference菜单项
10. 在Projects选项卡中选择DerivativesCalculatorService,如图2所示。

图2 添加项目引用
11. 单击OK按钮。
实现服务宿主程序
1. 在类文件中,添加using语句来导入下面的名字空间:
·System.ServiceModel
·System.Configuration
·DerivativesCalculatorService
2. 代码看起来应该如下所示:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.ServiceModel;
using DerivativesCalculatorService;
namespace Host
{
class Program
{
static void Main(string[] args)
{
}
}
}
3. 在Main方法中添加下面的代码:
{
Type serviceType = typeof(Calculator);
using (ServiceHost host = new ServiceHost(serviceType))
{
}
}
第一行代码得到一个类型引用,这个类型就是具体实现WCF服务的那个类,也是我们将要在宿主程序中运行的类。
using语句用来对ServiceHost实例进行初始化,在作用域结束时ServiceHost的Dispose()会被自动调用。
4. 在using语句内部,我们先启动ServiceHost,然后通过等待用户输入的方式来阻止应用程序退出。
5. 下面是完整的代码,新增的代码加亮显示。
{
class Program
{
static void Main(string[] args)
{
Type serviceType = typeof(Calculator);
using (ServiceHost host = new ServiceHost(serviceType))
{
host.Open();
Console.WriteLine("The calculator service is available.");
Console.ReadKey();
}
}
}
}
6. 选择File | Save All菜单项。
7. 在进入下一个任务之前请确保解决方案能够编译通过(按CTRL+Shift+B快捷键)。
配置服务
配置WCF服务的过程非常直接。配置选项对服务在运行的时候的行为进行控制。虽然服务的配置选项有许多,但在这个任务中我们只对服务的一些非常基本的行为进行配置。
1. 在Solution Explorer中选中Host项目,然后在主菜单中选择Project | Add New Item菜单项。
2. 在Project | Add New Item对话框中选择Application Configuration File模板,如图3所示。

图3 Add New Item对话框
3. 不要修改文件名,新的配置文件的文件名仍然是app.config。
4. 单击Add按钮。
5. 用下面的XML代码替换掉新添加的app.config文件中的所有内容。下面对配置设定做了一个简单的介绍。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="DerivativesCalculatorService.Calculator"
behaviorConfiguration="metadataBehavior">
<endpoint
address="CalculatorService"
binding="basicHttpBinding"
contract="DerivativesCalculatorService.IDerivativesCalculator"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/Derivatives/" />
<add baseAddress="net.tcp://localhost:8010/Derivatives/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
WCF配置文件的结构
•
•
•
•
•
•
•
6. 选择File | Save All菜单项。
7. 确保解决方案能够正常编译(选择Build | Build Solution菜单项)。
运行服务
我们已经定义了一个WCF服务,实现了该服务,对它进行了配置,还创建一个宿主程序来运行它。现在只要一切能够正常工作,我们的服务就可以运行并供用户使用了。
运行WCF服务
1. 在Solution Explorer中右键单击Host项目并选择Debug | Start new instance菜单项。这会启动命令行的服务宿主程序,看起来应该如图4所示。

图4 命令行的服务宿主程序
现在服务已经运行起来了,可以供用户调用。
验证服务
2. 在浏览器中打开下面的URL:
http://localhost:8000/Derivatives/
这是我们在app.config文件中给服务指定的位置。
注意:如果在Internet Explorer中遇到一个警告并看到一个如图14所示那样的黄色信息条,那么关掉警告对话框并在黄色的信息条上单击右键,选择Enable Intranet Settings,并在随后的确认对话框中选择Yes。
网页中显示的是我们刚创建的服务的WCF信息页。

图5 Internet Explorer 7显示的信息条
3. 单击靠近页面顶部的链接http://localhost:8000/Derivatives/?wsdl,并检查随后出现的WSDL页面。这就是服务的契约。
4. 关闭浏览器。
调用服务
Visual Studio提供了一个专门用来调用服务的工具WCF Test Client。这个工具不但可以查看一个已经发布的服务的接口,而且提供了一个图形界面来让我们调用服务。
1. 打开Visual Studio命令行窗口。
具体步骤:
在Windows的开始菜单中选择下面的菜单项:
Start | All Programs | Microsoft Visual Studio 2008 | Visual Studio Tools | Visual Studio 2008 Command Prompt.
2. 在命令行窗口输入:WcfTestClient.exe
程序随即启动。
3. 在WCF Test Client中选择File | Add Service菜单项。
Add Service对话框出现。
4. 根据我们在宿主程序中为服务配置的地址,在对话框中输入:
http://localhost:8000/Derivatives/
5. 单击OK按钮。
6. WCF Test Client添加了一个对该WCF服务的引用,并更新了用户界面让我们能够调用服务,如图15所示。

图6 WCF Test Client
用户界面右边的上半部分显示的是发往服务的请求,下半部分显示的是调用服务所得到的响应。
7. 在窗口的Request部分(上方),将方法的days参数设为5天。
8. 另外两个参数保持不变,仍然为null。我们的服务会忽略这两个参数。关于如何输入WCF Test Client将要发送的请求,请参见图15。
9. 单击Invoke按钮。
现在请求已经被发往WCF服务,得到的响应会在窗口的Response部分显示。
10. 重复调用服务几次。
11. 关闭WCF Test Client应用程序。
12. 关闭Visual Studio命令行窗口。
13. 返回正在运行服务宿主程序的命令行窗口并按Enter键,来关闭宿主程序。
14. 返回Visual Studio。
15. 选择Window | Close All Documents菜单项来关闭所有窗口。