Programmatically set InstanceContextMode

前端 未结 3 1016
死守一世寂寞
死守一世寂寞 2021-02-06 21:52

Is there a way to do this ...

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

...pro

相关标签:
3条回答
  • 2021-02-06 22:00

    I'm answering my own question as I've found a solution in another answer on stackoverflow, and I think stackoverflow is a great place to search without even having to ask a question, so hopefully I will add to that richness by answering my own question with a link to the other answer and not just closing my own question.

    My code now looks like this ...

    public HttpWebService(string baseUri, string acceptType, TApi serviceInstance = null)
    {
        _baseUri = baseUri;
        _acceptType = acceptType.ToLower();
    
        if (serviceInstance != null)
        {
            _host = new HttpServiceHost(serviceInstance, baseUri);
            var behaviour = _host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
            behaviour.InstanceContextMode = InstanceContextMode.Single;
        }
        _host = _host ?? new HttpServiceHost(typeof (TApi), baseUri);
    
        _host.Open();
        _client = new HttpClient();
        _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_acceptType));
    }
    

    I changed this ...

    _host = serviceInstance == null
                ? new HttpServiceHost(typeof (TApi), baseUri)
                : new HttpServiceHost(serviceInstance, baseUri);
    

    ... to this ...

    if (serviceInstance != null)
    {
        _host = new HttpServiceHost(serviceInstance, baseUri);
        var behaviour = _host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
        behaviour.InstanceContextMode = InstanceContextMode.Single;
    }
    _host = _host ?? new HttpServiceHost(typeof (TApi), baseUri);
    
    0 讨论(0)
  • 2021-02-06 22:10

    We can also use the ServiceBehaviourAttribute at the Service class in order to set the InstanceContextMode as below:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class MyService : IMyService
    {
    //service code
    }
    
    0 讨论(0)
  • 2021-02-06 22:11

    Even though the original answer contains the solution it is Just a straight answer to the question

    ServiceHost host = new ServiceHost(typeof(YourService)); //Or get the Servicehost
    ((ServiceBehaviorAttribute)host.Description.
    Behaviors[typeof(ServiceBehaviorAttribute)]).InstanceContextMode 
    = InstanceContextMode.Single;
    
    0 讨论(0)
提交回复
热议问题