Установить InstanceContextMode программно

Есть ли способ сделать это ...

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

... программно?

Причина в том, что я хочу передать экземпляр моей службы непосредственно в мой вспомогательный класс для самостоятельного размещения при интеграционном тестировании моей службы.

Я использую Castle Windsor для создания всех своих объектов, что отлично работает при использовании тестового веб-сайта. Но я получаю следующую ошибку, когда пытаюсь использовать мой вспомогательный класс HttpWebService ...

System.InvalidOperationException was unhandled by user code
  Message=In order to use one of the ServiceHost constructors that takes a service instance, the InstanceContextMode of the service must be set to InstanceContextMode.Single.  This can be configured via the ServiceBehaviorAttribute.  Otherwise, please consider using the ServiceHost constructors that take a Type argument.
  Source=System.ServiceModel

Это конструктор моего вспомогательного класса ...

public HttpWebService(string baseUri, string acceptType, TApi serviceInstance = null)
{
    _baseUri = baseUri;
    _acceptType = acceptType.ToLower();

    _host = serviceInstance == null
                ? new HttpServiceHost(typeof (TApi), baseUri)
                : new HttpServiceHost(serviceInstance, baseUri);
    _host.Open();
    _client = new HttpClient();
    _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_acceptType));
}

Итак, мне нужно программно установить InstanceContextMode когда в "тестовом режиме интеграции", т.е. в моем вспомогательном классе.

Думаю, мне нужно сделать что-то вроде этого ...

if (serviceInstance != null)
{
    _host = new HttpServiceHost(serviceInstance, baseUri);
    var whatDoIDoNow = null;
    _host.Description.Behaviors.Add(whatDoIDoNow);
}

Любая помощь / руководство было бы здорово, потому что я действительно застрял в этом.

40
задан Antony Scott 17 January 2012 в 21:49
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: