Добавление маршрутизации для устранения .SVC в REST-сервисе не работает - PullRequest
2 голосов
/ 25 марта 2011

Я создаю фиктивную службу REST WCF только для того, чтобы узнать, как она работает (подготовка к реальной сборке службы). У меня есть служба REST, работающая и отвечающая форматированием JSON и POX. Однако я не могу заставить работать решение для маршрутизации, чтобы исключить файл ".svc". Я использую VS 2010, WCF 4.0 и IIS 7.5 на Win Server 2008 R2.

Прямо сейчас URL работает как "/api/rest/rest.svc/json/myMethod", но я хочу просто иметь "/ api / rest / json / myMethod". Я нашел множество статей здесь на SO и в других местах, которые утверждают, что удалили файл ".svc". Я полагаю, что он настроен в соответствии с инструкциями, но проект не будет создан из-за ошибки в файле Global.asax.

В нем сказано добавить следующее к функции Application_Start:

RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), 
    typeof(RestService)));

Я также добавил в web.config следующее:

 <modules runAllManagedModulesForAllRequests="true">
     <add name="UrlRoutingModule"
          type="System.Web.Routing.UrlRoutingModule, 
      System.Web.Routing, Version=4.0.0.0, 
      Culture=neutral, 
      PublicKeyToken=31BF3856AD364E35" />

 </modules>
 <handlers>
     <add name="UrlRoutingHandler"
        preCondition="integratedMode"
        verb="*" path="UrlRouting.axd"
        type="System.Web.HttpForbiddenHandler, 
     System.Web, Version=4.0.0.0, Culture=neutral, 
     PublicKeyToken=b03f5f7f11d50a3a" />
 </handlers>

Я также добавил строки aspNetCompatibility в файл web.config и над классом в файле svc.cs.

Дело в том, что я не могу даже заставить проект построить. Когда я добавляю строку RouteTable.Routes.Add в global.asax и собираю ее, я получаю следующие ошибки:

тип 'System.ServiceModel.Activation.ServiceHostFactory' определяется в сборке, которая не ссылки. Вы должны добавить ссылку для сборки «System.ServiceModel.Activation, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' .

Имя типа или пространства имен 'ServiceRoute' не найден (есть Вы пропустили директиву использования или ссылка на сборку?)

Есть идеи, почему это не удается?

1 Ответ

5 голосов
/ 27 апреля 2011

убедитесь, что в проекте есть ссылка на «System.ServiceModel.Activation, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35», если обязательно добавьте его в файл web.config. - Иоаким 25 марта в 19: 03

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...