WCF auto-hospedeiro com servidor web auto-hospedeiro (httplistener) na mesma porta. Possível?

StackOverflow https://stackoverflow.com/questions/1732115

  •  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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top