Самостоятельный хостинг WCF с автономным веб-сервером (HTTPListener) на том же порту. Возможный? - PullRequest
2 голосов
/ 14 ноября 2009

Я работаю над приложением, и мне нужно предоставить ему веб-интерфейс. Я думал об использовании WCF для предоставления сервиса для веб-интерфейса и самостоятельного размещения в своем приложении (без IIS). Теперь, если эти двое не используют один и тот же порт, браузер будет жаловаться на XSS ...

Возможно ли это? Это хорошая идея?

EDIT После некоторого расследования мне удалось заставить это работать.

Вот код собственного хоста веб-службы:

var serviceHost = new ServiceHost(typeof(CalculatorService));
serviceHost.AddServiceEndpoint(typeof (ICalculator), new WSHttpBinding(), "http://localhost:8000/webservice");
serviceHost.Open();

Console.WriteLine("CalcService is running.");
Console.WriteLine("Press Enter to terminate the service.");
Console.ReadLine();
serviceHost.Close();

А вот код веб-хоста:

var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8000/webconsole/");
listener.Start();
Console.WriteLine("listening");
while(true)
{
    HttpListenerContext context = listener.GetContext();
    /* ... */
}

Чтобы веб-сервис работал, мне нужно было сделать this

Ответы [ 2 ]

3 голосов
/ 14 ноября 2009

Да- отлично работает. HTTP.SYS абстрагирует содержимое HTTP, которое использует WCF, и позволяет произвольному количеству процессов использовать один и тот же порт, если они все используют разные префиксы пути. Я делаю это все время по одной и той же причине.

Это не будет работать на XP в IIS 5.1 или на веб-сервере VS, хотя - на тот случай, если вы собираетесь попробовать. Они не основаны на HTTP.SYS, поэтому они ожидают получить исключительно свои порты. Что-нибудь еще, хотя (включая XP с 2 хостами WCF), вы готовы.

0 голосов
/ 14 ноября 2009

Звучит необычно, мне придется посмотреть это. Если больше ничего не работает, вы можете оставить его как два отдельных порта, но, возможно, использовать обратный прокси-сервер для сортировки конечной точки WCF?

...