WCF 3.5 запускает службы SOAP и REST бок о бок в IIS - PullRequest
3 голосов
/ 18 апреля 2011

Я знаю, что подобный вопрос задавался здесь:

Запуск SOAP и RESTful по одному и тому же URL

Размещение мыльных и остальных конечных точек WCF рядом друг с другом

, но я не нашел ответа на мою проблему.

У меня есть две настраиваемые фабрики обслуживания, которые включают внедрение зависимостей:

public class StructureMapSoapServiceHostFactory : ServiceHostFactory 
public class StructureMapRestServiceHostFactory : WebServiceHost2Factory

Детали реализации не являютсяздесь важно.

Затем я определил две конечные точки в web.config

<system.serviceModel>
    <behaviors>
   <serviceBehaviors>
    <behavior name="mexGet">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="jsonBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<bindings>
  <mexHttpBinding>
    <binding name="mexHttpBinding" />
  </mexHttpBinding>
</bindings>
      <services>
     <service behaviorConfiguration="mexGet" name="ServiceImplementation.ServiceCategory">
        <endpoint address="rest" 
                  binding="webHttpBinding" 
                  contract="Contracts.ServiceContracts.Mobile.IServiceCategory"
                  behaviorConfiguration ="jsonBehavior"/>
        <endpoint address="soap"
                  binding="basicHttpBinding"
                  contract="Contracts.ServiceContracts.Mobile.IServiceCategory" />
        <endpoint name="mexHttpBinding"
                  address="mex"
                  binding="mexHttpBinding" bindingConfiguration="mexHttpBinding"
                  contract="IMetadataExchange" />
     </service>
  </services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Затем я создал два файла .svc для каждого настраиваемого хоста: ServiceCategoryRest.svc ServiceCategorySoap.svc

Мне это не нравится.Я хотел бы, чтобы URL-адрес в этом стиле:

REST: http://server:port/rest/categories/{id}, который соответствует реализации моей ServiceCategory.GetCategory (int id)

SOAP:http://server:port/soap/GetCategory?id=someId

Мои вопросы.Нужны ли разные файлы SVC для активации хост-служб?Если мне нужно два файла .svc, как мне получить вышеуказанный URI?Боюсь, что мне нужно настроить переписывание IIS или что-то в этом роде, но я бы хотел этого избежать.

Заранее благодарен за помощь.

Томас

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

Вы можете достичь того, что ищете, с помощью сервисных маршрутов - части маршрутизации ASP.NET, доступной в ASP.NET 3.5 SP1 или более поздней версии.

Проверьте эти ресурсы:

В .NET 3.5 SP1 вам необходимо добавить некоторую дополнительную инфраструктуру в ваш web.config (модуль веб-маршрутизации и т. Д.) - в то время как в .NET 4 это все уже встроено.

0 голосов
/ 20 апреля 2011

После нескольких поисков я обнаружил, что на самом деле мне не нужны два разных файла .svc и два разных ServiceHostFactories.

Я сохранил только StructureMapRestServiceHostFactory: WebServiceHost2Factory и ServiceCategoryRest.svc, который обрабатывает запросы в RESTрежим и вызов в режиме RPC-SOAP.

Так что, если вы хотите запустить REST и SOAP рядом друг с другом, вы можете сделать это только с WebServiceHost2Factory.

Если затем вы хотите избавитьсячасти .svc из URL, пожалуйста, прочитайте сообщение Рика Штрала west-wind.com/weblog/posts/570695.aspx.

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