У меня есть опубликованная служба 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 ).

0
user1460819 24 Дек 2013 в 22:01

2 ответа

Лучший ответ

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

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

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

1
mgnoonan 24 Дек 2013 в 18:26

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

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

1
user3133287user3133287 24 Дек 2013 в 19:50