Erro no cliente WCF em execução no IIS 5.0 com o servidor no Windows 2008

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

  •  23-08-2019
  •  | 
  •  

Pergunta

Eu tenho um serviço .Net 3.5 SP1 WCF em execução no IIS 7 em uma máquina Windows 2008. Quando tento conectar a este serviço a partir de um IIS hospedados serviço WCF em execução no IIS 5.0 (Windows XP) .Net 3.5 SP1, eu recebo o seguinte erro:

O provedor de token não pode obter fichas para target: http: // (URL para WCF serviço)

Eu construí um aplicativo de console simples que pode se conectar com êxito ao serviço WCF usando a mesma configuração exata. Eu também construiu uma simples aplicação web hospedada sob o (servidor ASP.Net que vem com o Visual Studio 2008) servidor WebDev e é capaz de se conectar com sucesso para o serviço WCF. Quando eu configurado um diretório virtual dentro do IIS (Windows XP) para apontar para o mesmo diretório que o servidor WebDev, eu recebo o seguinte erro:

Não credenciais estão disponíveis no pacote de segurança

Mas, se eu definir o web.config para transformar a representação em usar minhas credenciais de logon, ele funciona bem. Esta não é uma boa solução a longo prazo, por razões óbvias. A única diferença que eu tenho notado entre os servidores Webdev IIS e são o usuário que cada processo é executado. IIS é executado na conta ASPNet e WebDev é executado sob minha conta.

Aqui está a configuração para a seção WCF no cliente:

<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>  

Aqui está a configuração do servidor (tal como solicitado):

  <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>

Quaisquer pensamentos sobre a causa deste erro?

Obrigado!

Foi útil?

Solução 2

Eu acho que a resposta definitiva a esta pergunta é para atualizar simplesmente para um sistema operacional que permite que você defina a identidade de um pool de aplicativos, o que eu tenho feito há séculos.

Obrigado pela consideração.

Matt

Outras dicas

Quando você acessa os serviços via IIS, com impersonate = false, então é a conta ASPNET que é usado para acessar o serviço na máquina Windows 2008.

A conta ASPNET é uma conta local e, portanto, não tem direitos sobre a máquina de 2008.

Existem 3 maneiras que você poderia resolver este:

  • Permitir acesso anónimo para o serviço na máquina Windows 2008
  • Use impersonate = true (como você tem)
  • Alterar a identidade do pool de aplicativos de aspnet para uma conta de domínio com o acesso necessário.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top