默认地 , SvcUtil还自动生成一个客户端配置文件output.config 。你可以使用/config开关来指定一个配置文件名:
SvcUtil http://localhost:8002/MyService/MEX/out:Proxy.cs /config:App.Config
并且 , 你可以使用/noconfig开关来压缩生成的配置文件:
SvcUtil http://localhost:8002/MyService/MEX/out:Proxy.cs /noconfig
为了支持进程内宿主 , 应用程序配置文件应该列出服务和客户端节 , 见列表8(见本文相应下载源码) 。注意 , NetNamedPipeBinding被用于进程内调用 。
WCF提供一个能够编辑宿主和客户端配置文件的配置文件编辑器SvcConfigEditor.exe(见图7) 。在写本文时 , SvcConfigEditor只是生成一些不可读的配置文件 , 因此 , 在纠正这一问题之前 , 你应该手工地编辑这个文件 。
图7:SvcConfigEditor用于编辑宿主和客户端配置文件 。
三. 创建和使用代理
SvcUtil生成的代理类派生自类ClIEntBase<T> , 定义为:
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();
}
在客户端配置文件中的每个合同类型的一个端点可以被指派为一个默认端点 。默认端点是一个没有名字标志或只有一个空名("")的端点节:
<system.serviceModel>
<client>
<endpoint
...
contract="IMyContract"
/>
<endpoint name="OtherEndpoint"
...
contract="IMyContract"
/>
</client>
</system.serviceModel>
一个默认的端点仅仅是一种理想情况;当创建一个针对默认端点的代理时 , 你可以使用代理的默认构造器来让它使用默认端点:
MyContractProxy proxy = new MyContractProxy();
proxy.MyMethod();
proxy.Close();
四. 可编程的客户端配置
不依赖于配置文件 , 客户端也可以通过编程方式来构建端点并且把它提供给代理构造器 。列表9(见本文相应下载源码)展示了这一技术 , 其中展示了等价于列表6中的代码(针对列表2中的服务) 。编程配置是很有用的:当端点决策或者是完全动态的-基于当前输入或在运行时刻使用;或当决策是静态的且从不更改时 , 你最好采用硬编码之 。
【WinVista新技术 WCF开发指南之客户端开发】五. WCF架构
到目前为止 , 本文讨论了建立和消费简单WCF服务所有要求的内容 。然而 , WCF还为可靠性、事务、安全和实例激活等提供了极其宝贵的支持 , 所有这些都依赖于WCF基于拦截的架构 。
让客户端与代理交互意味着 , WCF总是介于服务和客户端之间来拦截调用并且执行预调用和调用后处理 。当代理把调用堆栈帧串行化为一条消息并且沿着一个通道链发送消息时 , 该解释即开始 。
推荐阅读
- WinVista新技术 WCF开发指南之构建服务
- 爱恨交缠 深入剖析WinVista的五个利弊
- 恨铁不成钢 细数WinVista体验之五宗罪
- 简单免费 WinVista中自带截图工具试用
- 画饼也充饥 WinVista操作系统完美模拟实战
- 探析WinVista的五个最好和五个最差表现
- WinVista软件兼容系列评测之图形图像篇
- 微软坚称:800MHz就能运行WinVista
- 多图激赏 WinVista简体中文版安装过程
- WinXP五个不能启动问题不再困扰WinVista