Как WCF WebApi сопоставляет URI запроса с соответствующим типом / операцией службы?

Как WCF REST (и WCF WebApi) сопоставляет Uri с правильной конечной точкой службы?

В контексте WCF WebApi Preview 4: внутри настраиваемого канала делегирования я хотел бы найти связанный префикс маршрута или тип службы на основе входящего HttpRequestMessage.RequestUri.

Так, например,

RouteTable.Routes.MapServiceRoute<ManagersResource>("employees/managers", config);
RouteTable.Routes.MapServiceRoute<EmployeesResource>("employees", config);

Предположим, поступил запрос для http://server/employees/John

  1. Как WCF сопоставляет это с правильной конечной точкой?

К моменту создания экземпляра ResourceFactoryProvider он уже знает конкретный тип службы. Кажется, я не могу отследить, где происходит разрешение между маршрутами Uri и таблицы маршрутизации.

Большое спасибо заранее.


person Daniel    schedule 22.06.2011    source источник


Ответы (1)


Используя MapServiceRoute<TService>, код фактически регистрирует ServiceHostFactory в таблице маршрутизации ASP.NET. Итак, сначала запрос поступает в ASP.NET и направляет его в службу EmployeesResource (которая является единственным маршрутом, на который может быть сопоставлен URL-адрес). В этот момент узел службы веб-API WCF (HttpConfigurableServiceHost) будет использовать UriTemplateTable для отправки запроса соответствующей операции: если у вас есть что-то вроде кода ниже, эта операция будет вызываться:

[WebGet(UriTemplate = "/{employeeName}")]
public Employee Get(string employeeName);
person carlosfigueira    schedule 22.06.2011
comment
Я очень ценю твой ответ. Я не могу поверить, как мало информации о внутреннем устройстве маршрутизации служб WCF. Хотя меня в основном интересует, где существует код сопоставления, который определяет тип службы на основе URI запроса? Как ASP.NET или WCF определяет, что EmployeesResource является правильным маршрутом / службой для создания экземпляра? -направляет его на службу EmployeesResource (это единственный маршрут, на который может быть сопоставлен URL-адрес). Кажется, я не могу отследить стек вызовов и выяснить это. Еще раз спасибо! - person Daniel; 23.06.2011