У меня есть решение с 3 проектами:
- MEProject.WCF.ServiceLayer (услуга-реализация)
- MEProject.WCF.HostConsole (консольное приложение, в котором может размещаться служба)
- MEProject.WCF.HostIIS (приложение службы WCF)
Моя цель состоит в том, чтобы я мог переключаться между двумя проектами, не меняя uri (конфигурации конечной точки) в клиентском проекте. Что ж, проблема в том, что если я запускаю консольное приложение, конечные точки
http://localhost:8080/MultipleEndpointService/FirstEndpoint
http://localhost:8080/MultipleEndpointService/SecondEndpoint
Но если я запустил приложение-службу WCF, конечные точки будут
http://localhost:8080/MultipleEndpointService.svc/FirstEndpoint
http://localhost:8080/MultipleEndpointService.svc/SecondEndpoint
Как видите, разница в «.svc». Теперь мой вопрос: как я могу сказать приложению службы WCF действовать как консольное приложение и не иметь ".svc" в uri?
Вот код, который я использую для получения нескольких конечных точек в консольном приложении:
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
serviceHostBase.ChannelDispatchers.ToList().ForEach(channelDispatcher =>
{
ChannelDispatcher dispatcher = channelDispatcher as ChannelDispatcher;
if (dispatcher != null)
{
dispatcher.Endpoints.ToList().ForEach(endpoint =>
{
endpoint.DispatchRuntime.InstanceProvider = new CallBackInstanceProvider(serviceDescription.ServiceType, InstanceCreator);
});
}
});
}
А вот и приложение-служба WCF web.config:
<system.serviceModel>
<services>
<service name="MEProject.Service.WCF.HostIIS.MultipleEndpointService">
<endpoint name="FirstEndpoint" address="FirstEndpoint" binding="basicHttpBinding" contract="MEProject.Service.WCF.ServiceLayer.IFirstEndpoint"/>
<endpoint name="SecondEndpoint" address="SecondEndpoint" binding="basicHttpBinding" contract="MEProject.Service.WCF.ServiceLayer.ISecondEndpoint"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/MultipleEndpointService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Заранее благодарим за ответ!