2010-07-30 26 views
1

J'ai écrit un service WCF dans un service Windows, et pour une raison que je ne comprends pas, j'ai déployé le service sur un tas de systèmes (tous presque identiques dans OS et configuration), et il fonctionne sur tous les serveurs sauf un. La configuration pour tous les déploiements est identique à l'exception de l'adresse de base du service.Service WCF (net.tcp): Fonctionne sur tous les systèmes sauf un

Lorsque le service est démarré, je n'obtiens aucune exception lorsque j'ouvre le ServiceHost et lorsque j'utilise netstat -anp je peux voir le socket a été ouvert par le processus du service. J'ai configuré la journalisation du pare-feu Windows pour les paquets abandonnés, mais le fichier journal reste vide.

Si je tente d'accéder au service WCF de client test WCF, je reçois le message suivant:

Error: Cannot obtain Metadata from net.tcp://myhostname:9001/SysMonitorAgent 
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455. 
WS-Metadata Exchange Error  
    URI: net.tcp://myhostname:9001/SysMonitorAgent  
    Metadata contains a reference that cannot be resolved: 'net.tcp://myhostname:9001/SysMonitorAgent'. 
    There was no endpoint listening at net.tcp://myhostname:9001/SysMonitorAgent that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. 

J'ai essayé l'enregistrement WCF, mais le fichier journal ne même pas créé.

La configuration du service est la suivante:

<system.serviceModel> 
    <diagnostics> 
    <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /> 
    </diagnostics> 
    <bindings> 
    <netTcpBinding> 
     <binding name="InterfaceServiceNetTcpBinding"> 
     <security mode="None"> 
      <transport clientCredentialType="None" protectionLevel="None" /> 
      <message clientCredentialType="None" /> 
     </security> 
     </binding> 
    </netTcpBinding> 
    </bindings> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="InterfaceServiceBehavior"> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <services> 
    <service name="SysMonitor.Agent.Interface.InterfaceService" behaviorConfiguration="InterfaceServiceBehavior"> 
     <endpoint address="" binding="netTcpBinding" bindingConfiguration="InterfaceServiceNetTcpBinding" contract="SysMonitor.Agent.Interface.IInterfaceService"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://myhostname:9001/SysMonitorAgent" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
</system.serviceModel> 

Je suis un peu perdu, parce qu'il n'y a aucune indication quant à la raison pour laquelle il ne fonctionne pas. Toute aide serait appréciée.

Répondre

0

Sur le serveur que vous déployez également, quelque chose est-il en cours d'exécution sur le port 9100?

Il semble qu'il ne trouve pas le service. Avez-vous essayé de changer l'adresse de base? Par défaut, si vous le déployez sur des systèmes de serval et que cela ne fonctionne pas, c'est la configuration de la machine. Je vérifierais

  • Versions .NET
  • Assurez-vous qu'aucun Firewalls sont mis en place sur cette machine empêchant la liaison
  • Vérifiez le port que vous liez est ouvert dans ce cas 9100
  • Assurez-vous que toute 3 party .dll sont inclus dans le GAC ou le dossier si nécessaire.
  • Vérifiez tous les fichiers .dll et votre code est à jour.

Je vois le message d'erreur "net.tcp: // myhostname: 9001/SysMonitorAgent"

Avez-vous essayé de le remplacer par la machine adresse IP plutôt que d'utiliser le nom d'hôte?

+0

J'ai vérifié que le port n'est utilisé que par le processus correct. .NET est la version 4, installée sur toutes les machines. Les DLL tierces ne sont pas utilisées. Le seul pare-feu est le pare-feu Windows qui a une exception pour le port TCP utilisé. Tous les déploiements ont été effectués à partir du même fichier .msi et les fichiers sont identiques. – ErikHeemskerk

+0

Correction, et c'était une erreur stupide de ma part. J'ai essayé de changer le port, et j'ai remarqué en exécutant 'netstat -ano' que le port n'avait pas changé. Puis j'ai remarqué que j'avais édité le mauvais fichier de configuration. Merci pour le pointeur! – ErikHeemskerk

+0

Hey david, j'ai le même problème je pense et j'ai essayé ce que tu as dit mais ça n'a pas fonctionné ... peux-tu m'aider? voici la question pertinente: ** [Question] (http: // stackoverflow.com/questions/9273340/cant-test-net-tcp-service-in-wcftestclient # comment11690979_9273340) ** – Joze

0

En plus des points de David, vérifiez que le service Windows est en cours d'exécution.

Des erreurs dans le journal des événements?

+0

Le service est en cours d'exécution, et autre que "le service a commencé" il n'y a rien dans l'Observateur d'événements. – ErikHeemskerk