2

私は 2 つの完全に異なるタイプのサービス コントラクトを作成しようとしています。これは、複数のクライアントをサポートする必要がある 1 つ (IService) です。

[ServiceContract(CallbackContract = typeof(IClientCallBack), SessionMode = SessionMode.Required)]
public interface IService
{
    [OperationContract]
    void GetSquaredAsync();
}

public interface IClientCallBack
{
    [OperationContract(IsOneWay = true)]
    void Result(int i);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
class Service : IService
{
 void GetSquaredAsync(double x)
 {
   callback = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
   callback.Result(x * x);
 }

そして、これは 1 つのクライアントのみを許可する必要がある別の例です。

[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISuperUser
{
    [OperationContract]
    string WhoIsSpecial(string name);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class SuperUser : ISuperUser
{
    public string WhoIsSpecial(string name)
    {
        return String.Format("{0} is special ^_^", name);
    }
}

実装を含む私の実際の ServiceContracts は大きすぎてここに投稿できないため、これは単なる例ですが、考え方は同じです。1 つの ServiceContract で、利用可能な関数呼び出しがわずかしかない状態でサービスをチェックし、Callback を使用して関数へのアクセスを許可する別の ServiceContract が必要です。1 つのサービス ホストがこれらの ServiceContract の両方を同時にサポートできるようにすることはできますか?

4

1 に答える 1