C#でWCF4を使用しています。Singleに設定されたInstanceContextModeを使用しています。コントラクトを実装するクラスのインスタンスは、サービスをホストするオブジェクトの参照を受け入れるコンストラクターを使用して作成されます。サービスオブジェクトは、サービスホストが作成およびホストされているときに渡されます。
サービス実装コード:
[ServiceBehavior(UseSynchronizationContext = false,
InstanceContextMode = InstanceContextMode.Single)]
public class ServiceImpl : IMyContract
{
private ServiceHoster _sh;
ServiceImpl(ServiceHoster sh)
{
_sh = sh;
}
public string Call(string input)
{
... //Do some processing on the input string
return _sh.ProcessCall(string input);
}
}
ServiceHosterコード:
public class ServiceHoster
{
private ServiceImpl ns;
ServiceHoster()
{
...
Start();
}
private void Start()
{
//Host Service
ns = new ServiceImpl(this);
//Instantiate NetTCP service
_tcpServiceHost = new ServiceHost(ns, new Uri("net.tcp://localhost:8089"));
_tcpServiceHost.Open();
}
private void Stop()
{
if(ns != null && ns.State == CommunicationState.Opened)
ns.Close();
}
public string ProcessCall(string input)
{
...
return result;
}
}
私が今直面している問題は、クライアントとサーバー間の二重通信が必要なことです。二重接続の場合、InstanceContextModeをPerSessionに設定する必要があります。
私の質問は次のとおりです。
InstanceContextModeに複数の値を何らかの方法で使用できますか(これは不可能だと思います)?
ServiceImplオブジェクトがそれをホストしているオブジェクトの参照を取得する他の方法はありますか?
問題を解決するために私が別の方法でできることはありますか?
ありがとう。