我为我所面临的问题找到了一个很好的解决方案。通常,当我们托管 WCF 端点时,这是我们遵循的代码。
ServiceHost serviceHost = new ServiceHost(typeof(IService))
在这里,您传入您向 ServiceHost 实例公开的接口的类型。除了这种方法,您可以使用 ServiceHost 构造函数的第二个重载,它接收一个实例化的对象!现在代码是这样的
ServiceImplementation implementation1 = new ServiceImplementation();
ServiceHost serviceHost = new ServiceHost(implementation1);
这里唯一需要注意的是,您需要将您的实现实例模式标记为“InstanceContextMode.Single”,从而有效地使其成为 Singlreton。
现在它解决我的问题的方法是我使用我的实现类将任何元数据从主机传递到实现。我的代码现在看起来像这样。
// 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”中。