如何对待所有Service Reference返回类型相同

时间:2012-07-27 17:54:19

标签: .net wcf silverlight service-reference

我有一个Silverlight项目,它引用了一些Web服务。每个Web服务方法都返回一个名为GenericWebResponse的标准响应包装器对象。此类包含有关是否成功调用的信息,以及一些状态代码,如果它未能指出失败的原因。常见的情况是身份验证票证已过期,或者用户无权执行操作。

无论如何,每当Web服务调用失败时,我都希望以同样的方式对待它。我想创建一个日志条目,通知用户出错的地方等等。

由于我有多个服务,因此每个服务引用都会生成相同GenericWebResponse类的新实例。所以我有ProductService.GenericWebResponseOrderService.GenericWebResponse,显然.NET将它们视为完全独立的类。

我想要一种方法来编写针对这些对象的代码。我知道响应总是一样的,但.NET不知道。我明白了。但是有什么方法可以针对这些对象编写代码,这样我就不必为每个服务编写新版本的故障记录代码了吗?

3 个答案:

答案 0 :(得分:1)

您可以为每个代理生成的响应类型创建一个分部类,它实现您定义的公共接口,并在您的实现中转发到具体的代理生成类型。使用T4,可能有一种方法可以自动生成而不是手动执行。

如果您定义了服务并且可以访问接口类型,那么您可以以不同的方式创建代理....动态代理....或使用您自己的T4模板。

http://wcfdynamicclient.codeplex.com/

http://intellecting.net/blog/post/Using-T4-To-Generate-WCF-Client-Proxy.aspx

过去曾使用过DynamicProxy ...有2个好处....它解决了当频道出现故障时你不能再使用代理的麻烦......而且还在开发你的服务界面时流畅/不断发展....您不必每次都更新服务参考....使用服务的C#界面意味着您在构建时保持同步。

答案 1 :(得分:0)

如果您知道字段将完全相同,则可以使用反射来提取属性值。

答案 2 :(得分:0)

如果服务是.NET服务,那么当您使用“添加服务引用”时,可以单击“高级”,然后选择“重用类型”。您将需要引用包含原始类型的项目,但它应该使用每个引用的实际类型。