0

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

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

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

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

4

3 回答 3

1

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

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

http://wcfdynamicclient.codeplex.com/

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

过去使用过 DynamicProxy...有 2 个好处....它解决了当通道出现故障时您不能再使用代理的问题...以及在开发时您的服务接口是流畅的/不断发展......您不必每次都更新您的服务参考......使用您的服务的 C# 接口意味着您在构建时保持同步。

于 2012-07-27T19:52:39.327 回答
0

如果您知道字段完全相同,则一种选择是使用反射来提取属性值。

于 2012-07-27T19:56:19.773 回答
0

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

于 2012-07-27T20:50:19.913 回答