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

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

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

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

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

Скажем, запрос приходит на http://server/employees/John

  1. Как WCF отображает это на правильную конечную точку?

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

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

1 Ответ

6 голосов
/ 23 июня 2011

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

[WebGet(UriTemplate = "/{employeeName}")]
public Employee Get(string employeeName);
...