Erreur dans le client WCF en cours d'exécution sous IIS 5.0 avec le serveur sous Windows 2008

StackOverflow https://stackoverflow.com/questions/897718

  •  23-08-2019
  •  | 
  •  

Question

J'ai un .Net 3.5 SP1 service WCF fonctionnant sous IIS 7 sur une machine Windows 2008. Lorsque je tente de se connecter à ce service à partir d'un service hébergé IIS WCF fonctionnant sous IIS 5.0 (Windows XP) .Net 3.5 SP1, je reçois l'erreur suivante:

Le fournisseur jeton ne peut pas obtenir des jetons pour cible: http: // (URL pour le service WCF)

Je l'ai construit une application simple de la console qui peut se connecter avec succès au service WCF en utilisant exactement la même configuration. J'ai aussi construit une simple application web hébergé sous le serveur WebDev (serveur ASP.Net qui vient avec Visual Studio 2008) et il est capable de se connecter avec succès au service WCF. Lorsque j'ai configuré un répertoire virtuel dans IIS (Windows XP) à un point dans le même répertoire que le serveur WebDev, je reçois l'erreur suivante:

Aucune information d'identification sont disponibles dans le package de sécurité

Mais, si je mets le web.config à tourner l'usurpation d'identité sur l'utilisation de mes lettres de créance d'ouverture de session, il fonctionne très bien. Ce n'est pas une bonne solution à long terme pour des raisons évidentes. La seule différence que je l'ai noté entre IIS et les serveurs WebDev sont à l'utilisateur que chaque processus est en cours d'exécution sous. IIS exécute sous le compte réSEAU et WebDev fonctionne sous mon compte.

Voici la configuration de la section WCF sur le client:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="200" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsHttpBinding>
    <binding name="FABindings" maxReceivedMessageSize="2147483647">
      <readerQuotas maxStringContentLength="300000"/>
      <security mode="Message">
        <message clientCredentialType="Windows" negotiateServiceCredential="false" establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://<server url>/FinancialAggregator/v3/Services/FAService.svc"
      binding="wsHttpBinding" bindingConfiguration="FABindings"
      contract="ServiceReference1.IFilteredService" name="FAServiceEndpoint">
    <identity>
      <servicePrincipalName value="<UsernameRunningTheAppPoolOnW2k8>" />
    </identity>
  </endpoint>
</client>  

Voici la configuration du serveur (comme demandé):

  <system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647">
      <security mode="Message">
        <message establishSecurityContext="false" negotiateServiceCredential="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="200" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="mexBehavior" name="FCSAmerica.Financial.Aggregator.Service.FilteredService">
    <endpoint name="FAServiceEndpoint" address="" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" contract="FCSAmerica.Financial.Aggregator.Service.IFilteredService">
    </endpoint>
  </service>
</services>

Toute réflexion sur la cause de cette erreur?

Merci!

Était-ce utile?

La solution 2

Je suppose que la réponse ultime à cette question est de passer simplement à un système d'exploitation qui vous permet de définir l'identité d'un pool d'applications, que je l'ai fait il y a des siècles.

Merci pour l'examen.

Matt

Autres conseils

Lorsque vous accédez aux services via IIS, avec impersonate = false, alors il est le compte réSEAU qui est utilisé pour accéder au service sur la machine Windows 2008.

Le compte réSEAU est un compte local et ne dispose donc pas de droits sur la machine 2008.

Il y a 3 façons dont vous pouvez résoudre ceci:

  • Autoriser l'accès annonymous au service sur la machine Windows 2008
  • Utilisez impersonate = true (comme vous)
  • Modifier l'identité du pool d'applications de aspnet à un compte de domaine avec l'accès requis.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top