Служба работает как объект, экземпляр которого создается в соответствии со свойством ServiceBehaviourAttribute
InstanceContextMode
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
// ...
Значения InstanceContextMode:
Single
- один экземпляр службы выполняется для всех сеансов и вызовов PerSession
- экземпляр службы выполняется для каждого сеанса (т. Е. Каждого клиента) PerCall
- экземпляр службы создается для каждого вызова, даже с одного клиента
Значением по умолчанию является PerSession
, и это имеет смысл для большинства сценариев.Предполагая, что вы используете PerSession
, вы можете поместить любую «логику подключения» в конструктор для службы.
// you don't need to specify PerSession as it is default, but I have for clarity
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyService : IMyService
{
public MyService()
{
// constructor will be called for each new client session
// eg fire an Event, log a new client has connected, etc
}
// ...
}
Вам нужно быть осторожным при запуске кода в конструкторе, потому что служба будетне будет доступен, пока конструктор не завершится.Если вы хотите сделать что-то, что может занять время, запустить событие или отправить поток для выполнения этой работы.