Использование службы единого окна для размещения 4 различных проектов WCF.Как? - PullRequest
0 голосов
/ 15 октября 2018

Имеют более 5 проектов WCF.4 из которых должны быть размещены как служба Windows, а 1 - в IIS.Все на одной машине.

Для каждого из 4 проектов WCF мне требуется 4 проекта службы Windows для размещения отдельно.Чтобы свести к минимуму количество поддерживаемых проектов, я думаю об одной единственной службе Windows, чтобы установить все 4 проекта WCF для удобства сопровождения.В любом случае, кроме OnStart и OnStop, я вызываю wcf, и никакой другой логики здесь нет.

Проблемы, которые я вижу, состоят в том, что для каждой службы Windows требуется один и тот же файл конфигурации приложения, который используется в проектах WCF.Если бы я делал это динамически, получая имя службы из настроек приложения, как я могу загрузить файл app.config различных проектов wcf для размещения в качестве службы Windows во время выполнения.

Возможно ли это?Если да, то как мне этого добиться?

1 Ответ

0 голосов
/ 20 октября 2018

Да, это возможно, вам просто нужно настроить каждую конечную точку в вашем конфигурационном файле.Как это сделать:

  1. Хостом WCF Windows Service является ServiceHost класс, поэтому вам нужно создать 4 хоста для каждого контракта.

    var serviceHost= новый ServiceHost (typeof (CommunicationManagement));serviceHost.Open ()

  2. Теперь вы можете настроить каждую конечную точку вашей службы в разделе служб:

<system.serviceModel>
<services>
	<service name="Communication.Service.CommunicationManagement">
		<endpoint
				binding="netTcpBinding" 
					bindingConfiguration="myBinding" 
					contract="Communication.Service.ICommunicationManagement" 
					name="CommunicationManagement">
			<identity>
				<dns value="localhost" />
			</identity>
		</endpoint>
		<endpoint address="MEX" binding="mexHttpBinding" contract="IMetadataExchange" />
		<host>
			<baseAddresses>
				<add baseAddress="http://localhost:8000/Communication/Service/CommunicationManagement" />
			</baseAddresses>
		</host>
	</service>
	<service bname="Communication.Service.Managers.PhoneAdatpersManager">
		<endpoint 
				binding="netTcpBinding"
					bindingConfiguration="myBinding" 
					contract="Communication.IPhoneAdministration"
					name="PhoneAdministration">
			<identity>
				<dns value="localhost" />
			</identity>
		</endpoint>
		<endpoint address="MEX" binding="mexHttpBinding" contract="IMetadataExchange" />
		<host>
			<baseAddresses>
				<add baseAddress="http://localhost:8000/Communication/Service/PhoneAdministration" />
			</baseAddresses>
		</host>
	</service>
</services>
<system.serviceModel>
Выше вы можете увидеть службы PhoneAdatpersManager и CommunicationManagement, которые размещаются в одной службе Windows и работают вместе на порту 8000 (но вы можете использовать разные порты).
...