2010-11-15 24 views
2

Nous avons créé un service WCF hébergé en tant que service Windows. Notre service est installé avec notre application sur un ordinateur, et il ne sera jamais accessible à distance à partir d'autres clients. Nous l'avons donc conçu pour utiliser des canaux nommés ... Sur notre ordinateur de développement, il fonctionne parfaitement lorsque nous installons et exécutons notre service et notre application. Cependant, lorsque nous déployons notre application et notre service sur un ordinateur de test et l'exécutons, nous obtenons une exception SecurityNegotiationException, qui est due à un appel que notre application effectue au service lorsqu'elle est lancée. Si je commente cet appel de service, notre application se charge et s'exécute correctement, tant qu'elle n'utilise pas le service. J'ai parcouru Internet pour voir comment résoudre ce problème, mais je n'ai pas pu trouver quoi que ce soit qui traite spécifiquement des tuyaux nommés WCF + Windows Service +. J'apprécierais vraiment votre aide!Déploiement du service WCF dans le service Windows avec des tubes recevant 'System.ServiceModel.Security.SecurityNegotiationException'

Merci,

Mike

EXCEPTION

Version cadre: v4.0.30319 Description: Le processus a été interrompu en raison d'une exception non gérée. Exception Info: System.ServiceModel.Security.SecurityNegotiationException Stack:

trace de la pile de serveur: à System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade (stream Stream, SecurityMessageProperty & remoteSecurity) à System.ServiceModel.Channels .StreamSecurityUpgradeInitiatorBase.InitiateUpgrade (stream stream) à System.ServiceModel.Channels.ConnectionUpgradeHelper.InitiateUpgrade (StreamUpgradeInitiator upgradeInitiator, connexion IConnection &, décodeur ClientFramingDecoder, IDefaultCommunicationTimeouts defaultTimeouts, TimeoutHelper & timeoutHelpe r) à System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble (connexion IConnection, ArraySegment`1 préambule, TimeoutHelper & timeoutHelper) à System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection (connexion IConnection, TimeoutHelper & timeoutHelper) au système .ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection (timeout TimeSpan) à System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen (TimeSpan timeout) à System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan timeout) à System.ServiceModel.Channels. ServiceChannel.OnOpen (TimeSpan timeout) à System.ServiceModel.Channels.CommunicationObject. Ouvrir (délai d'attente TimeSpan) à System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (timeout TimeSpan, cascade CallOnceManager) à System.ServiceModel.Channels.ServiceChannel.EnsureOpened (Timeout TimeSpan) à System.ServiceModel.Channels.ServiceChannel. Call (String action, Boolean oneway, opération ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, opération ProxyOperationRuntime) à System.ServiceModel.Channels. ServiceChannelProxy.Invoke (message IMessage) à ClientSaver.MainForm..ctor() à ClientSaver.Program.Main()

====== ============================================= =

L'APPLICATION DU SERVICE.FICHIER DE CONFIGURATION

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="" name="ClientSaver.VssService.VssService"> 
      <endpoint address="Pipe" binding="netNamedPipeBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="net.pipe://localhost/VssService/" /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 

========================================= ==================

RENSEIGNEMENTS WCF === CLIENT dE SON app.Config ==

<bindings> 
      <netNamedPipeBinding> 
       <binding name="NetNamedPipeBinding_IVssService" closeTimeout="00:01:00" 
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
         transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
         hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" 
         maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536"> 
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
          maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
         <security mode="Transport"> 
          <transport protectionLevel="EncryptAndSign" /> 
         </security> 
       </binding> 
      </netNamedPipeBinding> 
    </bindings> 
    <client> 
      <endpoint address="net.pipe://localhost/VssService/Pipe" binding="netNamedPipeBinding" 
       bindingConfiguration="NetNamedPipeBinding_IVssService" contract="VssService.IVssService" 
       name="NetNamedPipeBinding_IVssService"> 
       <identity> 
         <servicePrincipalName value="host/DEVPC_W7.aboh.local" /> 
       </identity> 
      </endpoint> 
    </client> 
    <services> 
     <service name="ClientSaver.VssService.VssService"> 
      <endpoint address="net.pipe://localhost" binding="netNamedPipeBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 

      <endpoint address="http://localhost/VssService/" binding="basicHttpBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />        
     </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VssServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 
+0

Pouvez-vous s'il vous plaît nous donner le message d'erreur associé et l'exception interne le cas échéant? –

+0

Avez-vous déjà été au plus bas? J'ai le même problème. – KingCronus

Répondre

0

Le tube nommé liaison est utilisé uniquement pour service/client in-proc. Cela signifie que le service et le client doivent être sur le même ordinateur. Essayez plutôt d'utiliser TcpBinding si le client et le service sont développés avec WCF. Lorsque vous utilisez NetNamedPipeBinding, la sécurité du transport est configurée par défaut.

+0

Salut, Comme je l'ai mentionné dans ma description, le service et l'application sont installés sur le même ordinateur, de sorte que les tuyaux nommés devraient fonctionner. – ABOH

+0

Salut, il n'y a aucune exception interne ... Je suis toujours à la recherche sur le Net pour comprendre pourquoi je reçois cette exception SecurityNegotiationException. Tous les exemples que j'ai vus en utilisant des tuyaux ne nécessitent pas d'authentification. – ABOH

1

Cela provoque une négociation de sécurité entre les piles du client et du canal de service lorsque le canal est ouvert. Votre exception se produit au cours de l'initiation de cette négociation. (Voir here pour plus de détails sur la façon dont cela se produit.)

Pourriez-vous fournir des détails sur la configuration de votre client WCF? La valeur de la propriété Message de l'exception constituerait également une information de diagnostic utile. Je suppose qu'il y a une certaine discordance entre la configuration de la sécurité côté client et la configuration par défaut affichée pour le service.

+0

Bonjour Chris, je voyage jusqu'à vendredi, mais je vais essayer de déboguer à distance l'application et voir si je peux obtenir plus d'informations d'exception. Je me suis assuré que VS2010 a généré une interface actuelle à notre service WCF. Auparavant, j'avais posté le fichier app.config du service. Je vais publier le fichier client app.config car il peut contenir un indice quant à ce qui ne va pas. Je vous serais reconnaissant si vous pouviez jeter un coup d'oeil. Il contient Enterprise Logging ainsi que le code WCF généré. Merci de votre aide! --Mike – ABOH

+0

J'ai seulement posté le code pertinent WCF du app.config du client ... – ABOH

+0

Je soupçonne fortement que tout fonctionnera si vous supprimez l'ensemble de l'élément à partir de la config du point de terminaison client. –