Размещение нескольких служб в одном приложении с использованием IIS 7.5

У меня есть решение Visual Studio с 5 службами WCF. Все они находятся в одном проекте "MyCompany.MySoftware.Services".

На этот раз я размещаю их все в IIS (я привык размещать с использованием служб Windows, но я планирую использовать AppFabric, поэтому решил измениться), и я включил использование привязок HTTP и Net.TCP.

Конфигурация каждой службы выглядит следующим образом:

<service name="Kipany.Belvedere.Services.Services.AppointmentService"
         behaviorConfiguration="GeneralBehavior">
  <endpoint address="" binding="wsHttpBinding" 
            contract="Company.Software.Services.IService1" 
            name="appointmenthttp"/>
  <endpoint address="" binding="netTcpBinding" 
            bindingConfiguration="netTcpBindingConfig" 
            name="appointmenttcp" 
            contract="Company.Software.Services.IService1"/>
  <endpoint address="mex" binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
</service>

<service name="Kipany.Belvedere.Services.Services.AppointmentService"
         behaviorConfiguration="GeneralBehavior">
  <endpoint address="" binding="wsHttpBinding" 
            contract="Company.Software.Services.IService5" 
            name="appointmenthttp"/>
  <endpoint address="" binding="netTcpBinding" 
            bindingConfiguration="netTcpBindingConfig" 
            name="appointmenttcp" 
            contract="Company.Software.Services.IService5"/>
  <endpoint address="mex" binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
</service>

Я прочитал в этом посте, что я должен разрешить свою конечную точку netTcp без адреса при размещении в IIS. На данный момент мой IIS настроен на порт 808, поэтому я понимаю, что все мои службы используют этот порт.

Вопросы:

1 - Is this a good architecture to use ? 
2 - Can I face problems with this configuration ? 
3 - What if I want to use every service in a different tcp port ?
4 - The port for tcp binding is configurated in the Default Website but I have the option to fill the 'address' in the endpoint, what happens in this case ? As I have to put ONE port in the Default Website binding, how can I use more than one port in my Web.Config ?
5 - My tcp is using the 808 port but this is my Client's Web.Config:

Where is the 808 port ?


person Catinodeh    schedule 22.01.2012    source источник


Ответы (1)


  1. эта архитектура хороша
  2. в конфигурации нет ничего, что могло бы вызвать у вас проблемы
  3. Порт, который использует TCP, настраивается на уровне сайта в IIS (привязка сайта), поэтому службы должны находиться на разных сайтах, чтобы использовать разные порты — порт и остальная часть адреса предназначены для маршрутизации запроса, поэтому есть нет неотъемлемого преимущества для сервисов, находящихся на разных портах
  4. Как сказано в 3 - все сервисы на одном сайте будут использовать один и тот же порт
  5. клиент должен полностью определить адрес, но при размещении IIS определение адреса службы (включая порт) выводится из конфигурации IIS и файла .svc.
person Richard Blewett    schedule 22.01.2012
comment
Значит, только один порт может безболезненно обрабатывать все запросы? Как насчет параллелизма? Два запроса, выполненные одновременно, будут обрабатываться параллельно или один будет ждать другого? - person Catinodeh; 22.01.2012
comment
Все зависит от ваших настроек создания экземпляров и параллелизма вашего сервиса (я написал об этом в блоге здесь dotnetconsult.co.uk/weblog2/), но, безусловно, нет фундаментальной причины, по которой вы не можете обрабатывать запросы параллельно - person Richard Blewett; 22.01.2012