Я пытаюсь разместить две службы WCF в одном приложении. Я хочу, чтобы они использовали один и тот же BaseAddress, но имели свои собственные URL-адреса, например: net.tcp: // localhost: 1234 / service1 и net.tcp: // localhost: 1234 / service2
Следующий конфиг позволяет мне сделать это:
<system.serviceModel>
<services>
<service name="VanillaWcf.Shared.MyService" behaviorConfiguration="beh">
<endpoint address="myservice" binding="netTcpBinding" name="tcpEndPoint" contract="VanillaWcf.Shared.IMyService" />
<endpoint address="myservice" binding="wsHttpBinding" name="httpEndPoint" contract="VanillaWcf.Shared.IMyService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:1234" />
</baseAddresses>
</host>
</service>
<service name="VanillaWcf.Shared.SecondService" behaviorConfiguration="beh">
<endpoint address="secondService" binding="netTcpBinding" name="tcpEndPoint" contract="VanillaWcf.Shared.ISecondService"/>
<endpoint address="secondService" binding="wsHttpBinding" name="httpEndPoint" contract="VanillaWcf.Shared.ISecondService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:1234"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="beh">
<serviceMetadata httpGetEnabled="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
И код:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceHost secondHost = new ServiceHost(typeof(SecondService));
host.Open();
secondHost.Open();
Это отлично работает.
Однако я получаю исключение, когда добавляю http://localhost:4321 в качестве базового адреса обеих служб в конфигурации.
Исключение составляют:
ChannelDispatcher в 'http://localhost:4321/' с контрактом (-ами) "IHttpGetHelpPageAndMetadataContract"' не может открыть свой IChannelListene '
с внутренним исключением
Регистрация для URI уже существует http://localhost:4321
У меня нет конфигурации MEX, и я не хочу ее.
Примечание. Моя служба NetPortSharing отключена.