0

我正在尝试使用 Generic DataContract 类,这样我就不必为不同对象的集合实现多种类型。

经验:

我有一个 Profile 对象,其中包含一组对象。

所以我想要一个Profile<Foo>Profile<Foo1>其中 profile 包含 Foo 或 Foo1 对象的集合。

我一直在阅读 WCF 不支持泛型类,实际上我得到的错误如下。

Type 'GL.RequestResponse.ProfileResponse1[T]' 不能导出为模式类型,因为它是开放的泛型类型。如果其所有泛型参数类型都是实际类型,则只能导出泛型类型。`

现在 ProfileResponse 是我正在尝试使用的这个 Profile 对象。

现在在我的主机中,我正在执行以下操作。:

 ServiceConfig(typeof(ProfileHandler<EducationResponse>).Assembly, 
               typeof(ProfileRequest).Assembly,
               typeof(Container)).Initialize();

这是带有数据契约的处理程序的定义。

   public class ProfileHandler<T> : RequestHandler<ProfileRequest,
                                                   ProfileResponse<T>> 

Container 正在使用 Windsor Container 来注册对象。

注册工作正常,但是在我为 WCF 处理器实例化服务主机并调用主机的打开方法后,我得到了上述错误。

我真的没有办法用 agatha 为 wcf 编写通用响应请求吗?必须为该集合中包含的每种类型定义一个 Profile 容器类,这感觉像是一种浪费。

谢谢。

4

1 回答 1

0

不能有开放的通用处理程序,因为服务器端需要知道类型是什么。可以使用所谓的封闭泛型方法。这样,服务器端就知道了女巫加载处理程序的类型。

此外,还可以对 Agatha 进行配置,使其允许接收与请求相关的额外信息。在这种情况下,它将是包含在响应中的类型。

可以通过定义一个 BaseRequest 类并让所有请求扩展该类来做到这一点。此类可以具有采用响应类型的属性。或者要包装在响应中的类型。

在这个过程中,当检查请求时,进程可以得到要包装在响应中的类型,以便我知道如何加载类。

我没有实现这个,因为这会花费太多时间,而且我不确定我是否要负责为我们的应用程序维护 Agatha,但我会这样做。

于 2011-04-08T20:14:38.230 回答