C# WCF在每次调用中都使用一个新实例,尽管设置了InstanceContextMode.Single
我希望在每次WCF调用中重复使用相同的主机实例。我在网上读到的所有东西都说了同样的话;使用[ServiceBehavior]属性。所以,这就是我所做的:C# WCF在每次调用中都使用一个新实例,尽管设置了InstanceContextMode.Single,c#,.net,wcf,C#,.net,Wcf,我希望在每次WCF调用中重复使用相同的主机实例。我在网上读到的所有东西都说了同样的话;使用[ServiceBehavior]属性。所以,这就是我所做的: [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class DALService : IDataAccess { private string _adminConnStr; public void ServiceStart()
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class DALService : IDataAccess
{
private string _adminConnStr;
public void ServiceStart()
{
_adminConnStr = ConnectionStringManager.GetAdminDatabaseConnectionString();
}
public IEnumerable<CustomerInfo> GetCustomerInfosOrderedByShortname()
{
// _adminConnStr is null here!
}
}
我明白了
似乎WCF在您第一次调用它之前不会设置您的单例实例。基本上在这一行之后:
var serviceHost = new ServiceHost(attribute.ServiceType ?? instance.GetType());
serverHost.SingletonInstance将为空。所以,当我打电话时:
instance.ServiceStart();
我正在调用一个WCF不知道的实例上的ServiceStart
因此,我需要在创建serviceHost时在WCF上设置singleton实例:
然后,我可以在该实例上调用.ServiceStart。这将解决问题
instance.ServiceStart();
var serviceHost = new ServiceHost(instance);