2009-11-13 3 views
2

Je travaille sur une application et je dois lui fournir une interface web. Je pensais à utiliser WCF pour fournir un service pour l'interface web, et auto-héberger à la fois avec mon application (pas d'IIS). Maintenant, si ces deux n'utilisent pas le même port, le navigateur va se plaindre de XSS ...WCF d'auto-hébergement avec WebServer auto-hébergeant (HTTPListener) sur le même port. Possible?

Est-ce possible? Est-ce une bonne idée?

EDIT Après quelques recherches, j'ai réussi à le faire fonctionner.

Voici le code d'auto-hôte webservice:

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(); 

Et voici le code hébergeur:

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

Pour le webservice de travailler, je devais faire this

Répondre

3

Oui fonctionne correctement. HTTP.SYS résume les éléments HTTP utilisés par WCF et permet à un nombre arbitraire de processus de partager le même port tant qu'ils utilisent tous des préfixes de chemin différents. Je fais cela tout le temps pour exactement la même raison.

Cela ne fonctionnera pas sur XP dans IIS 5.1 ou avec le serveur Web VS, au cas où vous alliez essayer. Ils ne sont pas basés sur HTTP.SYS, donc ils s'attendent à obtenir leurs ports exclusivement. Quoi que ce soit d'autre, (y compris XP avec 2 hôtes WCF), vous êtes prêt à partir.

+0

Avez-vous un exemple de cela? J'ai essayé quelque chose mais ça n'a pas marché. Tout ce qui a été démarré en second lieu (wcf ou serveur web) se plaignait ... – subb

+0

Quel serveur web utilisez-vous? Il doit être basé sur HTTP.SYS (IIS6 + ou HttpListener, etc), et votre service doit être configuré avec un chemin URI que IIS n'a pas saisi (ie, vous ne pouvez pas écouter sur /, il faudra être/Services/Foo ou autre). – nitzmahone

+0

Ça a marché. Je vais ajouter le code au message principal. – subb

-1

Sons de fantaisie , Je vais devoir regarder celui-ci. Si rien d'autre ne fonctionne, vous pouvez le garder comme deux ports distincts, mais peut-être utiliser un proxy inverse pour trier le point de terminaison WCF?

Questions connexes