Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF在每次调用中都使用一个新实例,尽管设置了InstanceContextMode.Single_C#_.net_Wcf - Fatal编程技术网

C# WCF在每次调用中都使用一个新实例,尽管设置了InstanceContextMode.Single

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()

我希望在每次WCF调用中重复使用相同的主机实例。我在网上读到的所有东西都说了同样的话;使用[ServiceBehavior]属性。所以,这就是我所做的:

[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);