2010-04-23 11 views
1

J'ai une bibliothèque de services WCF contenant cinq contrats de service. La bibliothèque est hébergée via un service Windows. La plupart sinon la totalité de ma configuration pour la bibliothèque WCF est déclarative. La seule chose que je fais dans le code pour la configuration est de passer le type de la classe implémentant les contrats de service dans ServiceHost. J'appelle ensuite Open sur chacun des services au cours de l'événement Windows Service OnStart. Voici le message d'erreur que je reçois:L'hébergement d'un service WCF Lib via un service Windows obtient une exception System.InvalidOperationException: tentative de démarrage du service WCF

Le service ne peut pas être démarré. System.InvalidOperationException: Service '[Fubu.Conversion.Service1' a zéro points de terminaison d'application (non-infrastructure). Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application ou qu'aucun élément de service correspondant au nom de service n'a pu être trouvé dans le fichier de configuration ou qu'aucun point de terminaison n'a été défini dans l'élément de service. à System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (description ServiceDescription) à System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (description du ServiceDescription, ServiceHostBase ServiceHost) à System.ServiceModel.ServiceHostBase.InitializeRuntime() à System.ServiceModel .ServiceHostBase.OnBeginOpen() à System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan timeout) à System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) à System.ServiceModel.Channels.CommunicationObject.Open() à Fubu .RemotingHost.RemotingHost.StartServ ...

protected override void OnStart(string[] args) 
    { 
     // Uncomment to debug this properly 
     //System.Diagnostics.Debugger.Break(); 
     StartService1(); 
     StartService2(); 
     StartService3(); 
     StartService4(); 
     StartService5(); 
    } 

Chacun des ci-dessus simplement procédez comme suit:

private void StartSecurityService() 
    { 
     host = new ServiceHost(typeof(Service1)); 
     host.Open(); 
    } 

service Lib résumé de

<services> 
    <service behaviorConfiguration="DefaultServiceBehavior" name="Fubu.Conversion.Service1"> 
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="TCPBindingConfig" 
     name="Service1" bindingName="TCPEndPoint" contract="Fubu.Conversion.IService1"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
     name="mexSecurity" bindingName="TcpMetaData" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8025/Fubu/Conversion/Service1/" /> 
     </baseAddresses> 
    </host> 
    </service> 

...

contrat est réglé comme suit: espace de noms Fubu.Conversion.Service1 {

[ServiceContract(Namespace = "net.tcp://localhost:8025/Fubu")] 
public interface IService1 
{ 

J'ai regardé "haut et bas" pour une solution sans chance. La réponse est-elle évidente? La solution à cela ne semble pas être. Merci

Répondre

1

Et la raison est douloureusement simple !!!! Comme je l'ai noté dans l'explication de la question, j'ai une bibliothèque de service WCF hébergée dans un service Windows. J'avais mal défini et localisé le fichier app.config dans le projet WCF Service Library. J'ai veillé à ce que le fichier app.config soit toujours affiché dans le dossier bin des builds. Une fois que j'ai déplacé ou copié ce fichier de configuration dans le projet de service Windows, le problème a été résolu et les services les 5 ont démarré correctement. Un autre point à noter est de s'assurer que les points finaux définis pour les services individuels utilisent des ports uniques.

Et la morale de l'histoire: « Assurez-vous de définir et localiser le fichier app.config au sein du projet qui hébergera votre bibliothèque de services

.