你可以使用Visual Studio 2005来导入服务元数据并且生成一个代理。假如服务是自宿主的,那么首先要启动该服务,然后从客户端工程的上下文菜单中选择"Add Service Reference…"。假如服务宿主在IIS或WAS上,那么就不需要预启动该服务了。
有趣的是,假如服务是自宿主在与客户端工程同一个方案中的另一个工程中,那么你可以在Visual Studio 2005中启动宿主并且仍然添加参考,因为不同于大多数工程设置,这个选项是无法禁止的(见图6)。这会导致调出"Add Service Reference"对话框,你需要在其中提供服务的基地址(或一个基地址和一个MEX URI)以及包含代理的命名空间。
图6.你可以使用Visual Studio 2005生成一个代理。
Visual Studio 2005使用SvcUtil.exe命令行工具,并且你可以自己使用它。主要理由是,你可以使用SvcUtil开关所提供的众多的选项。为了直接使用SvcUtil,你可以提供给它MEX地址并且,作为选择,还可以提供一个代理文件名。默认的代理文件名是实现该服务的服务端类的名字。例如,当把服务MyService宿主在IIS中时,简单地运行下列命令行:
public class ClientBase<T> : IDisposable { protected ClientBase(string endpointConfigurationName); protected ClientBase(Binding binding,EndpointAddress remoteAddress); public void Close(); public void Dispose(); protected T InnerProxy{get;} //其它成员 } 这个InnerProxy属性是客户端需要消费的合同类型,并且SvcUtil生成的ClientBase<T>的子类简单地把它代理到方法调用(见列表5)。客户端需要实例化一个代理对象并且提供给其构造器端点信息-或者是来自配置文件的端点节名(见列表6)或者是在不使用一个配置文件时的端点地址和绑定对象。然后,该客户端可以使用代理方法来调用该服务,并且客户端完成后,它需要关闭该代理实例:
MyContractProxy proxy = new MyContractProxy("MyEndpoint"); proxy.MyMethod(); proxy.Close(); 关闭代理将终止与服务的会话并且关闭连接。作为选择,你可以使用代理的Dispose()方法来关闭它。Dispose()方法的优点在于,你可以使用using语句来调用它,即使在面临异常处理时:
using(MyContractProxy proxy = new MyContractProxy("MyEndpoint")) { proxy.MyMethod(); } 在客户端配置文件中的每个合同类型的一个端点可以被指派为一个默认端点。默认端点是一个没有名字标志或只有一个空名("")的端点节:
WCF的第一个发行版本为开发服务(例如宿主,服务实例治理,异步调用,可靠性,事务治理,非连接性队列调用和安全性)提供了许多有用的工具。在WCF的第二个发行版本中将添加服务发现以及事件出版和订阅。WCF要求.NET 2.0环境并将同Windows Vista一同发行。另外,你可以在Windows xp SP2和Windows Server 2003 SP1环境下使用它。