私が直面した問題のための素晴らしい解決策を見つけました。通常、WCFエンドポイントをホストするとき、これは私たちが従うコードです。
ServiceHost serviceHost = new ServiceHost(typeof(IService))
ここでは、ServiceHostインスタンスに公開するインターフェイスのタイプを渡します。このアプローチの代わりに、インスタンス化されたオブジェクトを取り込むServiceHostコンストラクタの2番目のオーバーロードを利用できます。今のコードがどのように見えるここで注意すべきこの
ServiceImplementation implementation1 = new ServiceImplementation();
ServiceHost serviceHost = new ServiceHost(implementation1);
だけの事は、あなたが効果的にそれをSinglretonを作り、「InstanceContextMode.Single」として実装インスタンスモードをマークする必要があるということです。
私の問題を解決する方法は、実装クラスを使用してホストから実装にすべてのメタデータを渡すことです。私のコードは今このように見えます。
// Create a metadata class just to hold your data.
public class MetaData
{
public MetaData(string data1,int data2)
{
Data1 = data1;
Data2 = data2;
}
public string Data1 { get; set; }
public int Data2 { get; set; }
}
//インスタンスをホストに渡すだけです。
MetaData metaData = new MetaData("D1", 100);
ServiceImplementation implementation1 = new ServiceImplementation(metaData);
ServiceHost serviceHost = new ServiceHost(implementation1);
//私の実装では、この
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
internal class ServiceImplementation : IService
{
private MetaData m_MetaData;
public ServiceImplementation(MetaData metaData)
{
m_MetaData = metaData;
}
public string Ping(string name)
{
return m_MetaData.Data1;
}
}
のように見えますが、メンバーのm_MetaData '内のすべてのメタデータを持っていることを参照してください。
WCFはすでにMSMQというメッセージングエンジンをサポートしています。これを使用できない理由は何ですか? –