Windows Communication Foundation (WCF) 服务主机(WcfSvcHost.exe)允许你启动 Visual Studio 调试器(F5)来自动托管和测试已实现的服务。 然后,可以使用 WCF 测试客户端(WcfTestClient.exe)或自己的客户端测试服务,以查找并修复任何潜在的错误。
WCF 服务主机
WCF 服务主机枚举 WCF 服务项目中的服务,加载项目的配置,并为它找到的每个服务实例化主机。 该工具通过 WCF 服务模板集成到 Visual Studio 中,在开始调试项目时调用该工具。
通过使用 WCF 服务主机,可以在开发过程中托管 WCF 服务(在 WCF 服务库项目中),而无需编写额外的代码或提交到特定主机。
注释
WCF 服务主机不支持部分信任。 如果要在部分信任中使用 WCF 服务,请不要在 Visual Studio 中使用 WCF 服务库项目模板来生成服务。 而是通过选择 WCF 服务网站模板在 Visual Studio 中创建新的网站,该模板可以在支持 WCF 部分信任的 WebServer 中承载该服务。
WCF 服务主机托管的项目类型
WCF 服务主机可以托管以下 WCF 服务库项目类型:WCF 服务库、顺序工作流服务库、状态机工作流服务库和联合服务库。 WCF 服务主机还可以托管那些可以使用 “添加项 ”功能添加到服务库项目中的服务。 这包括 WCF 服务、WF 状态机服务、WF 顺序服务、XAML WF 状态机服务和 XAML WF 顺序服务。
但是,应注意该工具不会帮助你配置主机。 对于此任务,必须手动编辑 App.config 文件。 该工具也不会验证用户定义的配置文件。
谨慎
不应使用 WCF 服务主机在生产环境中托管服务,因为它未出于此目的进行设计。 WCF 服务主机不支持此类环境的可靠性、安全性和可管理性要求。 相反,请使用 IIS,因为它提供卓越的可靠性和监视功能,并且是托管服务的首选解决方案。 服务开发完成后,应将服务从 WCF 服务主机迁移到 IIS。
在 Visual Studio 中使用 WCF 服务主机的方案
下表列出了 命令行参数 对话框中的所有参数,可通过在 Visual Studio 的解决方案 资源管理器 中右键单击项目,选择 “属性”,然后选择 “调试 ”选项卡并单击“ 启动项目”来找到这些参数。 这些参数可用于配置 WCF 服务主机。
参数 | 含义 |
---|---|
/client |
一个可选参数,指定要在承载服务后运行的可执行文件的路径。 这会在托管后启动 WCF 测试客户端。 |
/clientArg |
将字符串指定为传递给自定义客户端应用程序的参数。 |
/? |
显示帮助文本。 |
使用 WCF 测试客户端
创建新的 WCF 服务项目并按 F5 启动调试器后,WCF 服务主机将开始托管它在项目中找到的所有服务。 WCF 测试客户端会自动打开并显示配置文件中定义的服务终结点列表。 在主窗口中,可以测试参数并调用服务。
若要确保使用 WCF 测试客户端,请在 Visual Studio 的解决方案资源管理器 中右键单击项目,选择 “属性”,然后选择“ 调试 ”选项卡。单击“ 启动项目” ,确保以下命令显示在 “命令行参数 ”对话框中。
/client:WcfTestClient.exe
使用自定义客户端
若要使用自定义客户端,请在 Visual Studio 的解决方案资源管理器中右键单击项目,选择“属性”,然后选择“调试”选项卡。单击“启动项目”,并在/client
”对话框中编辑参数以指向自定义客户端,如以下示例所示。
/client:"path/CustomClient.exe"
当按 F5 再次启动服务时,WCF 服务主机会在启动调试器时自动启动自定义客户端。
还可以使用 /clientArg:
参数将字符串指定为传递给自定义客户端应用程序的参数,如以下示例所示。
/client:"path/CustomClient.exe" /clientArg:"arguments that are passed to Client"
例如,如果使用联合服务库模板,则可以使用以下命令行参数:
/client:iexplore.exe /clientArgs:http://localhost:8731/Design_Time_Addresses/Feed1/
指定无客户端
若要指定 WCF 服务托管后不会使用任何客户端,请在 Visual Studio 的解决方案资源管理器 中右键单击项目,选择“ 属性”,然后选择“ 调试 ”选项卡。单击“ 启动项目” 并将 “命令行参数 ”对话框留空。
使用自定义主机
若要使用自定义主机,请在 Visual Studio 的解决方案资源管理器 中右键单击项目,选择 “属性”,然后选择“ 调试 ”选项卡。单击“ 启动外部程序 ”并输入自定义主机的完整路径。 还可以使用 “命令行参数 ”对话框指定要传递给主机的参数。
WCF 服务主机用户界面
最初调用 WCF 服务主机时(通过按 Visual Studio 中的 F5), WCF 服务主机 窗口会自动打开。 WCF 服务主机运行时,程序图标将显示在通知区域中。 双击图标以打开 WCF 服务主机 窗口
在服务托管期间发生错误时,将打开 WCF 服务主机对话框以显示相关信息。
WCF 服务主机主窗口包含两个菜单:
文件:包含 Close 和 Exit 命令。 单击“ 关闭”时, WCF 服务主机 对话框将关闭,但服务将继续托管。 单击“ 退出”时,WCF 服务主机也会关闭。 这也会停止所有托管服务。
帮助:包含包含版本信息的 About 命令。 它还包含可打开帮助文件的 帮助 命令。
主 WCF 服务主机 窗口包含两个区域:
第一个区域是 服务。 它包含显示所有服务的基本信息的列表。 这些信息包括:
服务:列出所有服务。
状态:列出服务的状态。 有效值为“Started”、“Stopped”和“Error”。
元数据地址:显示服务的元数据地址。
第二个区域是 “其他信息”。 当在 服务区域中选择 特定服务行时,它会显示服务状态的详细说明。 如果状态为“错误”,则可以在屏幕上查看完整的错误消息。
停止 WCF 服务主机
可以通过以下四种方式关闭 WCF 服务主机:
在 Visual Studio 中停止调试会话。
从 WCF 服务主机窗口中的“文件”菜单中选择“退出”。
从系统通知区域内 WCF 服务主机任务栏图标的上下文菜单中选择“退出”。
如果正在使用 WCF 测试客户端,请退出它。
在没有管理员权限的情况下使用服务主机
若要允许没有管理员权限的用户开发 WCF 服务,在安装 Visual Studio 期间会为命名空间 "http://+:8731/Design_Time_Addresses"" 创建 ACL(访问控制列表)。 ACL 设置为 (UI),其中包括登录到计算机的所有交互式用户。 管理员可以从此 ACL 添加或删除用户,或打开其他端口。通过此 ACL,用户无需授予管理员权限即可使用 WCF 服务自动主机(wcfSvcHost.exe)。
可以使用提升的管理员帐户下的 Windows Vista 中的 netsh.exe 工具修改访问权限。 下面是使用 netsh.exe的示例。
netsh http add urlacl url=http://+:8001/MyService user=<___domain>\<user>
有关 netsh.exe的详细信息,请参阅“如何使用 Netsh.exe 工具和 Command-Line 开关”。