Как сделать WebHttpBehavior для ClientAccessPolicy.xml прекратить кражу / угон корня IIS?


Я использую приложение Silverlight, которое имеет сеть.связь tcp WCF. Я хотел бы самостоятельно разместить ClientAccessPolicy.xml внутри ServiceHost и файл политики должны находиться в корневом каталоге, порт 80, согласно Silverlight net.требования к tcp (TCP-порт 4502-4534 и др.). Моя проблема заключается в том, что, когда мой ServiceHost работает, он крадет порт 80 root из IIS, и ни одна из моих веб-страниц не работает.

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

host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), "http://localhost/").Behaviors.Add(new WebHttpBehavior());

Когда ServiceHost является после запуска я вижу свой http://127.0.0.1/ClientAccessPolicy.xml, но все веб-сайты на порту 80 перестают работать - я вижу стандартную веб-страницу WCF "Endpoint not found", созданную конечной точкой. Когда я выключаю ServiceHost, то вижу свой веб-сайт, но ClientAccessPolicy.xml больше нет.

Я попытался использовать полный путь для URI конечной точки:

policyUri.Scheme = "http";
policyUri.Port = 80;
policyUri.Query = "ClientAccessPolicy.xml";
host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), policyUri.ToString()).Behaviors.Add(new WebHttpBehavior());

Но это приводит к исключению аргумента. Перемещение политики в подкаталог или другой порт не будет работать, так как Silverlight смотрит только на порт 80. корневой веб-каталог.

Очевидно, что я могу просто скопировать ClientAccessPolicy.XML в корневую директорию веб-сервера и отключить конечной точки политики. Есть ли способ отключить конечную точку, чтобы она перехватывала только вызовы ClientAccessPolicy?xml, но не крадет весь порт IIS 80?

1 4

1 ответ:

Нет, два процесса не могут прослушивать один и тот же порт TCP/IP. Если ваш ServiceHost прослушивает порт 80, то это будет единственный процесс, отвечающий на соединения на этом порту.

Сказав это, вы можете заставить "главный" процесс прослушивать порт 80 и перенаправлять соединения на "дочерние" процессы, но это выходит за рамки сферы и цели ServiceHost.