.net 如何对待所有服务引用返回类型相同

.net 如何对待所有服务引用返回类型相同,.net,wcf,silverlight,service-reference,.net,Wcf,Silverlight,Service Reference,我有一个Silverlight项目,它引用了一些web服务。每个web服务方法都返回一个名为GenericWebResponse的标准响应包装器对象。此类包含有关调用是否成功的信息,以及一些状态代码(如果失败),以指示失败的原因。常见的情况是身份验证票证过期,或者用户没有执行该操作的权限 无论如何,每当web服务调用失败时,我都希望以同样的方式处理它。我想创建一个日志条目,通知用户出了什么问题,等等 由于我有多个服务,每个服务引用都会生成同一GenericWebResponse类的新实例。所以我

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

无论如何,每当web服务调用失败时,我都希望以同样的方式处理它。我想创建一个日志条目,通知用户出了什么问题,等等

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


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

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

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


在过去使用过DynamicProxy…有两个好处…它解决了通道故障时无法再使用代理的问题…而且在开发服务接口时,您的服务接口是流动的/不断变化的…您不必每次都不断更新服务引用…使用服务的C#接口意味着您可以继续使用生成时同步。

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

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