Как мне вызвать мой конструктор WCF Service? - PullRequest
5 голосов
/ 02 ноября 2010

В настоящее время я пытаюсь разобраться с услугами WCF для среды разработки ASP.NET, и я считаю, что у меня все хорошо, кроме одной вещи, которая меня озадачила.

По сути, яВы настроили службу WCF (давайте возьмем значение по умолчанию с добавленным конструктором):

public class MyService : IMyService
{
    public MyService() { /* blah */ }
    public DoWork() { /* blah */ }
}

Интерфейс IMyService определяет метод DoWork() как [OperationContract], как и должно быть.

Итак, я получил ссылку на этот сервис в другом проекте (скажем, на тестовом проекте [Unit]) через Добавить ссылку на сервис в интерфейсе VS2010.Это создает ссылку на MyServiceClient, которая предоставляет мои методы службы WCF, как и должно быть.

Однако, когда я делаю это в моем тестовом проекте:

ServiceReference.IMyService service;
service = new ServiceReference.MyServiceClient();

... theMyService() конструктор не вызывается, в основном потому, что я создаю MyServiceClient, а не MyService как таковой.

Как мне получить вызов этого конструктора?Я планирую использовать это для целей инициализации (например, возможно, захват слоя в многоуровневой реализации?).

Ответы [ 2 ]

6 голосов
/ 02 ноября 2010

Этот конструктор будет вызываться на сервере при выполнении запроса от клиента.

Создание «ссылки» на веб-службу (а затем с использованием клиентских классов)очень отличается от ссылки на обычный .DLL.Весь ваш сервисный код будет выполняться на стороне сервера, но не до тех пор, пока сервис не будет запущен ...

1 голос
/ 02 ноября 2010

Единственный способ вызова конструктора на стороне сервера для каждого запроса - установить InstanceContextMode в PerCall (в атрибуте ServiceBehavior).

...