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()期待どおりに文字列型 param を持つメソッドを取得します。

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