1

我正在编写一些可以在多个 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. 为什么会这样,有没有办法解决它?

4

0 回答 0