Как заявили комментаторы, это невозможно. Вы не можете продлить контракт на обслуживание, если вы не добавите к нему операции, что будет означать перекомпиляцию и перераспределение ваших услуг.
Одним из способов добиться того, что вы хотите, является размещение новой конечной точки службы с помощью операции HealthyStatus(), которая затем вызывает другие службы (в некотором неинтрузивном порядке) и возвращает статус. Но это потребует, чтобы ваши другие службы выставляли операцию, которую можно было бы назвать без последствий, и ваше определение того, что на самом деле означает здоровый статус.
Некоторые балансировочные балансиры могут быть настроены для обеспечения мониторинга работоспособности http-узлов, но опять же определение здорового здесь является текучим и может быть недостаточно определенным для ваших нужд.
Если вы счастливы, чтобы обновить вашу службу, вероятно, наименее навязчивый, что нужно сделать было бы создать новый контракт на обслуживание, как:
[ServiceContract]
public interface IHealthCheckServiceContract
{
[OperationContract]
int CheckStatus();
}
и затем все ваши другие сервисные контракты реализовать:
[ServiceContract]
public interface IMyService1 : IHealthCheckServiceContract
{
...
}
[ServiceContract]
public interface IMyService2 : IHealthCheckServiceContract
{
...
}
Очевидно, что при таком подходе вы могли бы подкласс ваши implmentations сервис
public abstract class HealthChecker
{
public abstract int CheckStatus();
}
public class MyService1 : HealthChecker, IMyService1
{
public override int CheckStatus()
{
// MyService1 implementation of CheckStatus()
}
// Implementation of IMyService1 operations
.....
}
public class MyService2 : HealthChecker, IMyService2
{
public override int CheckStatus()
{
// MyService2 implementation of CheckStatus()
}
// Implementation of IMyService2 operations
.....
}
Вы не можете этого сделать. – Chandru
Что такое * актуальная * проблема? Почему вы не можете изменять службы? Класс WCF Service * - это * служба, а методы * - это операции. WSDL * * генерируется из этих классов и методов. Добавление новой операции означает добавление нового метода. –
Это вопрос о версии? «Добавление метода» означает нарушение существующего WSDL, потому что вы добавили новую операцию. Вы пытаетесь поддержать новую операцию, не нарушая предыдущих клиентов? –