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.