WCF auto-hospedeiro com servidor web auto-hospedeiro (httplistener) na mesma porta. Possível?
-
20-09-2019 - |
Pergunta
Estou trabalhando em um aplicativo e preciso fornecer uma interface da web. Eu estava pensando em usar o WCF para fornecer um serviço para a interface da web e auto-hospedeiro com meu aplicativo (sem IIS). Agora, se esses dois não estiverem usando a mesma porta, o navegador reclamará sobre o XSS ...
Isso é possível? isso é uma boa ideia?
EDITARDepois de alguma investigação, consegui fazê -lo funcionar.
Aqui está o código de auto-hospedeiro da Web Service:
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();
E aqui está o código do host da web:
var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8000/webconsole/");
listener.Start();
Console.WriteLine("listening");
while(true)
{
HttpListenerContext context = listener.GetContext();
/* ... */
}
Para o serviço da web trabalhar, eu precisava fazer isto
Solução
Sim- funciona bem. Http.sys abstrai o material HTTP que o WCF usa e permite que um número arbitrário de processos compartilhe a mesma porta, desde que todos estejam usando prefixos de caminho diferentes. Eu faço isso o tempo todo pelo mesmo motivo.
Isso não funcionará no XP no IIS 5.1 ou com o VS Web Server, no entanto- apenas para o caso de você tentar. Eles não são baseados em http.sys, então esperam obter suas portas exclusivamente. Qualquer outra coisa, porém (incluindo XP com 2 hosts WCF), você está pronto para ir.
Outras dicas
Parece chique, vou ter que assistir a este. Se nada mais funcionar, você pode mantê -lo como duas portas separadas, mas talvez usar um proxy reverso para resolver o terminal do WCF?