Я знаю, что подобный вопрос задавался здесь:
Запуск 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 или что-то в этом роде, но я бы хотел этого избежать.
Заранее благодарен за помощь.
Томас