2011-01-14 2 views
1

Je suis à la recherche d'un moyen d'héberger un service HTTP très basique, mais très performant, qui s'intègre à IIS en utilisant .Net.Service HTTP de base avec IIS mais sans WCF

J'ai envisagé l'option d'utiliser HttpListener mais je doute de ses performances et nous allons également exécuter de nombreux services qui écoutent tous sur le même port.

En fait, s'il était possible d'avoir un point de terminaison WCF qui intercepterait toute requête avec une URL commençant par ce point de terminaison, mais pouvant se terminer par n'importe quoi, cela pourrait être une solution.

Je construis une bibliothèque cliente qui encapsulera un protocole personnalisé avec des points de terminaison de métadonnées personnalisés, des points de terminaison de découverte personnalisés et des ressources. L'idée est que la bibliothèque Client établira automatiquement les associations entre les points de terminaison et les ressources (/ autres points de terminaison), de sorte que l'utilisation de WCF n'est pas possible car ce mappage sera inconnu au moment de la compilation.

Une autre raison est que nous allons vers une direction de l'indépendance de la plate-forme et nous voulons l'option de remplacer facilement IIS avec Apache à l'avenir.

Merci!

Répondre

2

Je pense que vous pourriez toujours utiliser WCF pour votre service. En ce qui concerne d'hébergement en dehors de IIS vous avez des options:

http://msdn.microsoft.com/en-us/library/ms730158.aspx

En outre, votre client peut le construire est des liaisons et critères d'évaluation lors de l'exécution. Les détails n'ont donc pas besoin d'être spécifiés dans la section system.serviceModel de votre .config. Tout ce qui peut être spécifié dans le fichier .config peut également être fait dans le code. [Edit] Vous n'avez pas besoin de "spécifier" chaque point de terminaison à WCF. Si vous connaissez l'adresse à l'exécution, transmettez-la simplement au code qui crée votre proxy de service. Jetez un oeil à la classe ChannelFactory, vous pouvez lui passer une liaison (que vous pouvez obtenir à partir de config, ou bulid à l'exécution) et un point de terminaison (le point de terminaison est créé très simplement en fournissant l'adresse) voici un exemple de méthode créez un proxy de service de type T. Dans l'exemple ci-dessous, l'adresse de point de terminaison provient de .config mais vous pouvez la transmettre depuis n'importe où dans votre code.

/// <summary> 
    /// Creates a service proxy from a binding name and address 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    public static T Create<T>() 
    { 
     string endpoint = ConfigurationManager.AppSettings["FactoryEndPointAddress"]; 
     string bindingname = ConfigurationManager.AppSettings["FactoryBindingName"]; 
     var address = new EndpointAddress(endpoint); 
     var factory = new ChannelFactory<T>(GetBinding(bindingname), address); 
     return factory.CreateChannel(address); 
    } 
+0

Merci nixon. Je pense que cela serait possible, mais je préférerais ne pas avoir à spécifier chaque point de terminaison à WCF car alors je devrais mettre une telle logique dans la couche de communication que je préférerais avoir isolée dans un mappeur de point final. Ce que je veux que la couche de communication fasse est juste le HTTP de base. C'est aussi pour s'assurer que nous pouvons facilement remplacer IIS dans le futur à venir. – Mika

+0

Pas de problème compagnon, juste ajouté un peu plus de code et d'explication car je pense que la WCF est probablement encore le coup! jetez un coup d'oeil, j'espère que cela vous aidera. – nixon

Questions connexes