Должна ли служба WCF оставаться открытой все время? - PullRequest
3 голосов
/ 23 марта 2011

Я создаю службу wcf, теперь моя служба wcf размещена в консольном приложении, как показано ниже

 PersonService = new ServiceHost(typeof(PersonService));
 PersonService.AddServiceEndpoint(typeof(IPersonService), binding, "http://localhost:5645/PersonService");
 PersonService.Open();

Тогда я использую сервис wcf, используя класс ChannelFactory;

EndpointAddress endPoint = new EndpointAddress("http://localhost:5645/PersonService");
ChannelFactory<IPersonService> engineFactory = new ChannelFactory<IPersonService>(binding, endPoint);
IPersonService personChannel = engineFactory.CreateChannel();

Тогда я могу использовать этот канал для вызова метода, такого как

personChannel.GetPersonById("1");
personChannel.Close();

Мой вопрос:

Как показано в коде выше, сервис всегда открыт, пока канал закрыт после окончания работы с ним. Это хорошее поведение, чтобы держать сервис открытым, или я должен открывать сервис, а затем закрывать его при каждом вызове, учитывая, что у меня может быть два клиента, вызывающих одну и ту же услугу одновременно.

Пожалуйста, сообщите.

Ответы [ 3 ]

5 голосов
/ 23 марта 2011

Ну, ваш сервис должен оставаться «открытым» - это ваш язык, но на самом деле вызов «Open» помещает слушателя в порт.Сервер должен продолжать слушать, чтобы знать, когда клиент хочет подключиться к нему.Без этого клиент не будет разговаривать с сервером, который не слушает .

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

Это похоже на телефонный звонок.Кто-то должен сидеть рядом с телефоном, чтобы «прослушать» его звонок.Клиент поднимает трубку и звонит на горячую линию.Звонит телефон службы поддержки.Этот человек (который «слушает») поднимает трубку, и начинается «соединение» (т. Е. Разговор).

Когда клиент завершает работу, он / она отбрасывает телефон, и соединение заканчивается.Однако лицо, обслуживающее горячую линию, должно продолжать «прослушивать» новые звонки.

1 голос
/ 23 марта 2011

Службы WCF потребляют мало ресурсов, и наличие 50 служб WCF не является проблемой. Но, пожалуйста, поделитесь портом TCP между ними (номер 5645 в вашем случае).

1 голос
/ 23 марта 2011

Обычно он должен оставаться открытым, поскольку в противном случае он сломает старые прокси.

...