【发布时间】:2011-12-12 01:51:51
【问题描述】:
我想提供如下服务:
[ServiceContract]
interface IMyService<T>
{
[ServiceOperation]
void Foo(T item);
}
我可以在运行时发现我的通用合同的所有参数的类型(使用一些属性修饰)并使用类似的东西:
typeof(IMyService<>).MakeGenericType(typeof(Contact))
我可以获得合约和服务实现的有界泛型类型。从运行时的基本配置开始,我还可以将端点添加到主机。更了解我感兴趣的所有数据合约,我可以向主机添加每个数据合约的 DataContractResolver
挑战在于托管服务。在编译时我不知道类型参数,但我可以在运行时找到它。如何扩展 ServiceHost 或 ServiceHostBase 以将服务类型注入其中:
MyService<Contact>
什么时候需要?无论如何,ServiceHost 只会在运行时需要它...
【问题讨论】:
-
您是根据可能的通用合同类型(而不是 1 个端点)创建一个端点,您是自托管还是托管在 IIS 中?
-
是的,我正在为每个可能的通用合约(Juval Lowy 称之为有界通用)创建一个端点。问题不在于制作端点,而是创建必须具有一种实现服务类型的主机。我可以为每个可能的服务实现创建一个 ServiceHost。我不确定这将如何工作...我想在 WAS 中托管。