2009-10-09 23 views
3

Je travaille sur l'écriture de spécifications BDD pour un large éventail d'infrastructures de services WCF que j'écris. J'ai noté que chaque spécification que j'écris qui implique un appel à ServiceHost.Open(), cette ligne prend un bon 2 - 6 secondes à exécuter (le temps continue à augmenter pendant que j'ajoute de plus en plus de specs). J'ai remarqué que lorsque cette méthode est appelée, un Win32Exception est jeté:Win32Exception @ ServiceHost.Open() pour le service WCF

Win32Exception occurred 
Message: The specified domain either does not exist or could not be contacted. 
Stack Trace: at System.ServiceModel.UpnEndpointIdentity.GetUpnFromDownlevelName(String downlevelName) 
NativeErrorCode: 1355 
ErrorCode: -2147467259 

La configuration ServiceModel est la suivante:

<system.serviceModel> 
    <services> 
    <service name="TestServices.Calculator" behaviorConfiguration="default"> 
     <endpoint 
     name="calculator" 
     address="" 
     binding="wsHttpBinding" 
     contract="TestServiceContracts.ICalculator" /> 
     <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/calculator" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="default" > 
     <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

Note: J'ai configuré http.sys et ajouté http://+:80/calculator/ comme un espace de noms http l'exclusion, de sorte que cela ne fait pas partie du problème.

Cette erreur est plus grave sur un système Windows 7 Ultimate. Sur un système Vista Ultimate, cela ne semble pas causer autant de dégâts sur les performances, cependant ServiceHost.Open() est la majeure partie du temps passé à l'exécution. Je ne comprends pas pourquoi c'est un problème quand les URL sont localhost ... Je m'attendrais à ce que l'interface de bouclage soit la plus rapide de toutes.

Répondre

4

Le problème n'est pas avec localhost vs nom DNS ... il est lié à WCF appelant l'API TranslateName() pour convertir l'identité UPN du service d'un nom compatible SAM (par exemple DOMAIN \ user) à un nom canonique, et se plaindre qu'il ne peut pas se connecter au domaine spécifié dans le nom SAM-Compatible présenté en entrée. Vous ne savez pas exactement ce qui peut en être la cause, mais il se peut que vous spécifiez un domaine incorrect dans votre identité UPN, ou que l'enregistrement de domaine de votre machine ne fonctionne pas correctement ou que le pare-feu soit gênant. Que se passe-t-il si la machine n'est pas du tout sur un domaine?

+0

Tous les systèmes sur lesquels je teste font simplement partie du groupe de travail WORKGROUP par défaut. – jrista

+0

Se pourrait-il que le DNS ne résout pas le nom de votre machine en adresse IP locale, mais qu'il résolve plutôt quelque chose d'autre pour que le système d'exploitation interprète comme un nom de domaine? – tomasr

+0

Je n'ai pas défini l'élément . Je ne suis pas sûr de ce qu'il vaut par défaut quand il n'est pas explicitement défini. Je verrai ce que je peux trouver. – jrista