いくつかの 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
。これはなぜですか、それを回避する方法はありますか?