2010-06-02 22 views
11

Tengo un Servicio WCF que he reducido a casi nada debido a este error. Me está conduciendo por la pared. Esto es lo que tengo ahora.Stumped by "El servidor remoto devolvió un error: (403) Prohibido" con el Servicio WCF en https

Un servicio WCF muy simple con un método que devuelve una cadena con el valor "prueba".

Una aplicación web muy simple que utiliza el servicio y pone el valor de la cadena en una etiqueta.

Un servidor web que ejecuta IIS 6 en Win 2003 con un certificado SSL.

Otros servicios de WCF en el mismo servidor que funcionan.

publico el servicio WCF para su ubicación https

funciono con la aplicación web en el modo de depuración en VS y funciona perfectamente.

publico la aplicación web a la que es https ubicación en el mismo servidor del servicio WCF reside bajo el mismo certificado SSL

me sale, "El servidor remoto devolvió un error: (403) Prohibida"

He cambiado casi todas las configuraciones en IIS así como las aplicaciones WCF y Web en vano. He comparado la configuración en los servicios de WCF que funcionan y todo es igual.

A continuación se presentan el ajuste en el web.config para el Servicio WCF y la aplicación WEB:

Al parecer, el problema tiene que ver con la aplicación web, pero estoy fuera de ideas. Cualquier idea:

WCF Servicio:

<system.serviceModel> 
<bindings> 

<client /> 

<services> 
    <service behaviorConfiguration="Ucf.Smtp.Wcf.SmtpServiceBehavior" name="Ucf.Smtp.Wcf.SmtpService"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://test.net.ucf.edu/webservices/Smtp/" /> 
     </baseAddresses> 
    </host> 
    <endpoint address="" binding="wsHttpBinding" contract="Ucf.Smtp.Wcf.ISmtpService" bindingConfiguration="SSLBinding"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="Ucf.Smtp.Wcf.SmtpServiceBehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="True"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Web App:

<system.serviceModel> 
    <bindings><wsHttpBinding> 
<binding name="WSHttpBinding_ISmtpService" closeTimeout="00:01:00" 
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" 
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
    maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
<reliableSession ordered="true" inactivityTimeout="00:10:00" 
    enabled="false" /> 
<security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None" 
    realm="" /> 
    <message clientCredentialType="Windows" negotiateServiceCredential="true" 
    establishSecurityContext="true" /> 
</security> 
</binding> 

<client> 


<endpoint address="https://net228.net.ucf.edu/webservices/smtp/SmtpService.svc" 
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISmtpService" 
contract="SmtpService.ISmtpService" name="WSHttpBinding_ISmtpService"> 
<identity> 
<dns value="localhost" /> 
</identity> 

</client> 
</system.serviceModel> 

Respuesta

4

voy a responder a mi propia pregunta después de pasar horas y horas en este problema.Espero que esto ayude a todas las otras personas que se golpearon la cabeza contra la pared tratando de resolver esto. Finalmente conseguimos un administrador de red involucrado y resolvió esto.

Este es el escenario y la solución:

Tenemos un servidor de producción - todo funciona bien. Tenemos un servidor de prueba: obtenemos un error prohibido de 403. La depuración local funciona bien.

Todas las configuraciones son idénticas o eso pensamos.

Hay una configuración incorrecta. En IIS en las propiedades del directorio virtual del servicio web en la pestaña Seguridad del directorio, el segundo botón Editar es para restricciones de IP. Nuestro sistema estaba configurado para denegar el acceso a todas las direcciones IP, excepto la lista que debería haber incluido la dirección IP para el servidor de prueba. La IP del servidor web de prueba no recibió derechos. La razón por la que no tenía derechos era que se clonó recientemente desde el servidor virtual de producción y esta configuración nunca se ajustó para agregar el servidor virtual de prueba.

0

La única cosa que salta a mí es que está pasando la identidad ventanas con el mensaje, esto podría causar un problema de permisos si la cuenta de usuario sea pasado no tiene acceso al servicio WCF. ¿Necesitas potencialmente suplantación en la aplicación web?

0

De forma predeterminada, los enlaces WCF no permiten el acceso anónimo (no auth). Es necesario que modify the bindings para permitir que:

<wsHttpBinding> 
    <binding ...> 
     <security mode ="None"/> 
    </binding> 
    </wsHttpBinding> 
1

En mi caso, copié el código fuente de otra máquina y el directorio virtual no se había creado aquí. una vez que fui a las propiedades del proyecto y creé el directorio virtual funcionó bien.

0

En mi caso, mi usuario de la apppool no tenía acceso de lectura/escritura a 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Archivos temporales de ASP.NET' por algún motivo.

0

Asegúrate de tener compilation debug="true" conjunto.

Cuestiones relacionadas