Error en el cliente WCF se ejecuta en IIS 5.0 con el servidor en Windows 2008

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Tengo un servicio de WCF .Net 3.5 SP1 se ejecuta en IIS 7 en una máquina Windows 2008. Cuando intento conectar a este servicio desde un IIS alojado servicio WCF se ejecuta en IIS 5.0 (Windows XP) .Net 3.5 SP1, me sale el siguiente error:

El proveedor de ficha no puede conseguir fichas para objetivo: http: // ( URL para el servicio WCF)

He construido una aplicación de consola simple que puede conectarse correctamente al servicio WCF utilizando la misma configuración exacta. También he construido una sencilla aplicación web alojada en el servidor WebDev (servidor ASP.Net que viene con Visual Studio 2008) y es capaz de conectarse correctamente al servicio WCF. Cuando he configurado un directorio virtual dentro de IIS (Windows XP) al punto en el mismo directorio que el servidor WebDev, me sale el siguiente error:

Sin credenciales están disponibles en el paquete de seguridad

Pero, si fijo el web.config para convertir suplantación en el uso de mis credenciales de inicio de sesión, que funciona bien. Esta no es una buena solución a largo plazo, por razones obvias. La única diferencia que he notado entre IIS y los servidores son WebDev al usuario de que cada proceso se ejecuta bajo. IIS se ejecuta bajo la cuenta ASPNET y WebDev se ejecuta en mi cuenta.

Aquí está la configuración para la sección de WCF en el 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>  

Esta es la configuración del servidor (como se solicita):

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

¿Alguna idea sobre la causa de este error?

Gracias!

¿Fue útil?

Solución 2

Creo que la última respuesta a esta pregunta es simplemente actualizar a un sistema operativo que le permite establecer la identidad de un grupo de aplicaciones, lo que he hecho hace mucho tiempo.

Gracias por la consideración.

Matt

Otros consejos

Al acceder a los servicios a través de IIS, con impersonate = falso, entonces es la cuenta ASPNET que se utiliza para acceder al servicio en la máquina Windows 2008.

La cuenta ASPNET es una cuenta local y por lo tanto no tiene derechos sobre la máquina de 2008.

Existen 3 maneras en que podría resolver esto:

  • Permitir el acceso a la annonymous servicio en la máquina Windows 2008
  • Uso impersonate = true (ya que tienes)
  • Cambiar la identidad del grupo de aplicaciones de la Red del PEA a una cuenta de dominio con el acceso necesario.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top