2013-12-24 3 views
0

У меня есть опубликованная служба WCF в корневом каталоге (VPS, IIS 7). Он имеет файл Service1.svc и файл web.config.
Я хотел бы опубликовать еще одну службу WCF на одном и том же IIS в подпапке (предположим, что имя подпапки - subservice2). Эта другая служба WCF также имеет файл Service2.svc и файл web.config.
Где я должен помещать файлы второго сервиса WCF, чтобы он работал правильно?
Нужно ли устанавливать или изменять какие-либо настройки в IIS?
Моей первой попыткой было просто создать подпапку subservice2 и поместить все файлы второй службы WCF там, но это не сработало (я получаю Server Error in '/' Application., если пытаюсь получить доступ к mysiteaddress/subservice2/Service2.svc).Как опубликовать второй сервис WCF в подкаталоге?

+0

Не работает, как? Просто думая об этом, он не должен меняться. – Crudler

+0

спасибо за ваш комментарий, я добавил детали «не работает» – user1460819

ответ

1

У вас есть несколько вариантов.

  1. Объедините две конечные точки .svc в один проект, обновите конфигурации конечных точек в web.config, затем разверните их вместе. Это может быть невозможно, если два проекта имеют раздельные графики развертывания или обслуживания.
  2. Поскольку web.configs наследуются в одном и том же веб-приложении в IIS, вы можете потратить некоторое значительное время, пытаясь сгладить все конфликты конфигурации. Это возможно, но это грязно и сложно.
  3. Создайте новый веб-сайт в IIS и используйте заголовки хостов для прямого трафика на правильный сайт. Разверните новую службу на новом сайте. Это может также иметь проблемы с конфигурацией, если вы планируете использовать SSL. Если вы не используете подстановочный сертификат, комбинация IP и Port должна быть уникальной.

Вариант №1 - это просто ваше лучшее решение, если вы можете преодолеть слияние проекта.

+0

В третьем варианте (предпочтительнее для меня), какой заголовок хоста я должен установить? Я попробовал 'mywebsitename/subservice2', но получил сообщение об ошибке, что использование таких символов, как'/', запрещено ... – user1460819

+1

К сожалению, вы не можете этого сделать. Вам нужно будет установить заголовки для обоих сайтов, а один будет «subdomain1.domain.com», а другой будет «subdomain2.domain.com». – mgnoonan

+1

Быстрый поиск Google показал эту статью, которая может помочь вам, если вы решите придерживаться варианта № 2: http://www.dondraper.com/2010/02/how-to-stop-inheritance-of-webconfig- файлы/ – mgnoonan

1

Почему бы просто не связывать услуги с различными портами? Программным, что эквивалентно:

ServiceHost host = new ServiceHost(typeof(MyService)); 
Binding wsBinding = new WSHttpBinding(); 
Binding tcpBinding = new NetTcpBinding(); 
host.AddServiceEndpoint(typeof(IMyContract),wsBinding, 
    "http://localhost:8000/MyService"); 
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding, 
    "net.tcp://localhost:8001/MyService"); 
host.Open(); 

ServiceHost OtherHost = new ServiceHost(typeof(MyOtherService)); 
Binding wsBinding2 = new WSHttpBinding(); 
OtherHost.AddServiceEndpoint(typeof(IMyOtherContract),wsBinding2, 
    "http://localhost:8002/MyOtherService"); 
OtherHost.Open(); 

http://tutorials.csharp-online.net/WCF_Essentials%E2%80%94Programmatic_Endpoint_Configuration

Смежные вопросы