Question

Pour un code de test, je voudrais être en mesure d'accueillir un service WCF en quelques lignes. Je pensais que j'écrire une simple classe d'hébergement:

public class WcfHost<Implementation, Contract> : IDisposable
    where Implementation : class
    where Contract : class
{
    public readonly string Address = "net.tcp://localhost:8000/";
    private ServiceHost _Host;

    public WcfHost ()
    {
        _Host = new ServiceHost (typeof (Implementation));

        var binding = new NetTcpBinding ();
        var address = new Uri (Address);

        _Host.AddServiceEndpoint (
            typeof (Contract),
            binding,
            address);
        _Host.Open ();
    }

    public void Dispose ()
    {
        ((IDisposable) _Host).Dispose ();
    }
}

Cela peut être utilisé comme ceci:

using (var host = new WcfHost<ImplementationClass, ContractClass> ()) {

Y at-il quelque chose de mal avec cette approche? Y at-il une faille dans le code (en particulier. A propos de l'élimination)?

Était-ce utile?

La solution

La méthode Dispose de l'hôte peut lancer une exception si l'hôte est dans un état « défaillant ». Si cela arrive, vous ne verrez pas ce qui a mal tourné en fait que l'exception d'origine est perdue. Pour le code de test cela pourrait ne pas être un problème, mais il peut encore être dans votre chemin si vous essayez de comprendre pourquoi quelque chose ne fonctionne pas.

Je n'ai pas testé, mais ce qui suit devrait être OK dans votre méthode Dispose:

if (_Host.State == CommunicationState.Faulted)
{
    _Host.Abort();
}
else
{
    _Host.Close();
}

Autres conseils

Cela me semble bien à si vous êtes OK avec les limites d'une fixation fixe et l'adresse du serveur.

Vous devez être sûr que le code dans la using dure aussi longtemps que vous voulez que l'hôte soit disponible.

Si je mettre en œuvre que l'hôte de soi, je mettrais dans un service Windows, en utilisant les événements onStart et onStop. En outre, faire les modifications suivantes pour les meilleures pratiques:

  • Mettez la configuration des terminaux dans un fichier App.Config -. Mieux gérer dans un environnement de production
  • Séparer le service hôte des binaires de mise en œuvre et contrats.

Vous pouvez également consulter le site MSDN: http://msdn.microsoft.com/ fr-fr / bibliothèque / ms730158% 28V = VS.90% 29.aspx Il y a une bonne façon de « hôte le service dans un service Windows »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top