Я фактически реализовал свои собственные сервисные методы connect
, disconnect
и ping
, которые я вызываю вручную из своего клиента после создания канала. Используя их как своего рода раздел заголовка во всех моих определениях интерфейса ServiceContract
(и, конечно, их реализациях), они образуют временное "определение базовой службы", которое требует лишь небольшого количества вырезки из нити.
Строковые параметры connect
и disconnect
будут использоваться для отправки информации о клиенте на сервер и возврата информации о сервере и (возможно, уникального идентификатора соединения) клиенту. Кроме того, набор контрольных точек синхронизации также может появиться.
Обратите внимание, как требуется SessionMode
, а отдельные свойства OperationContract
IsInitiating
и IsTerminating
явно указаны для каждого метода, конечным результатом является то, что я бы назвал «односессионным» сервисом, поскольку он определяет connect
и disconnect
в качестве отдельных выходных сессий.
Обратите также внимание, что команда ping
будет использоваться в качестве цели для вызова «heartbeat» на основе таймера, который проверяет состояние подключения службы и устраняет таймауты подключения ALL без единого файла конфигурации: - )
Обратите внимание, что я еще не определил свою структуру обработки ошибок, которая может очень хорошо добавить метод или более и / или потребовать других видов изменений.
[ServiceContract( SessionMode = SessionMode.Required )]
public interface IRePropDalSvr {
[OperationContract( IsInitiating=true, IsTerminating=false )]
string connect (string pClientInfo);
[OperationContract( IsInitiating=false, IsTerminating=true, IsOneWay=true )]
void disconnect (string pClientInfo);
// ------------------------------------------------------------------------------------------
[OperationContract( IsInitiating=false, IsTerminating=false )]
string ping (string pInp);
// ------------------------------------------------------------------------------------------
// REST OF ServiceContract DEFINITION GOES HERE
Одно предостережение: хотя я в настоящее время использую этот код и его реализацию в своих классах обслуживания, я еще не проверял код.