我正在编写一些可以在多个 WCF 服务中重复使用的通用代码。我已经能够成功使用泛型接口和基类,然后添加仅指定要使用的类型的派生接口和类:
[ServiceContract]
public interface IGenericContract<T>
{
[OperationContract]
void DoSomething(T param);
}
[ServiceContract]
public interface IService : IGenericContract<string> {}
// Re-usable generic base class
public class GenericService<T> : IGenericContract<T>
{
public void DoSomething(T param)
{
}
}
// Specific service implementation
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class Service : GenericService<string>, IService
{
}
当我托管一个实例Service
并生成代理时,我得到了一个DoSomething()
带有字符串类型参数的方法,如预期的那样:
public void DoSomething(string param) {
base.Channel.DoSomething(param);
}
在我尝试使用相同的技术添加回调之前,这很有效:
public interface IGenericCallback<T>
{
[OperationContract]
void DoSomethingOnClient(T param);
}
public interface ICallback : IGenericCallback<string>
{
}
// Add CallbackContract type to service
[ServiceContract(CallbackContract = typeof(ICallback))]
public interface IService : IGenericContract<string> { }
生成的代理对ICallback
. 为什么会这样,有没有办法解决它?