WCF Http RouteTables (для управления версиями)

В настоящее время у меня есть что-то подобное для моей таблицы маршрутов. Есть ли лучший способ справиться с версиями в WCF Web API или обычный WCF?

RouteTable.Routes.MapServiceRoute<Service1>("1.0/Route1", Config1);
RouteTable.Routes.MapServiceRoute<Service2>("1.0/Route2", Config2);
RouteTable.Routes.MapServiceRoute<Service3>("1.0/Route3", Config3);
RouteTable.Routes.MapServiceRoute<Service4>("1.0/Route4", Config4);

1 ответ

Решение

Вы можете сделать это, но это очень привязано к протоколу, в данном случае HTTP. Интересно, есть ли способ сделать это, не беспокоясь о протоколах? В идеале мы хотим сделать это только один раз, а не для каждого транспорта. К счастью, есть способ, позвольте мне объяснить.

В конце концов, ваши внутренние компоненты WCF должны быть независимыми от протокола. Под этим я подразумеваю, что к тому моменту, когда метод вызывается в вашем сервисе, нам не нужно заботиться о том, прибывает ли он по REST, TCP, HTTP или по именованным каналам.

В WCF это довольно просто, как и управление версиями. С версионностью мы можем многое узнать о версиях интерфейса.NET, особенно когда это не имеет никакого отношения к WCF. Идея заключается в том, что ваш сервис должен реализовывать:

interface ISomething1 { ... }

Позже, когда потребуется новый метод или изменения, вы должны:

interface ISomething2 : ISomething1 { void SomethingNew (...) }

Тогда просто опубликовать ваш сервис с двумя конечными точками в конфигурации, одна указывает на ISomething1, а другая на ISomething2.

Другие вопросы по тегам