¿Cómo puedo exponer un servicio WCF en un directorio virtual sin autenticación de formularios?

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

Pregunta

Mi grupo crea sitios web ASP.NET MVC alojados internamente con autenticación de formularios.

Me gustaría alojar un servicio WCF en el mismo directorio virtual que un sitio web ASP.NET MVC.

Mi pregunta:

¿Cómo hago el servicio WCF de forma gratuita? sinautenticación de formularios.

Mi situación actual es esta:

  • Puedo acceder al .svc y ver la información wsdl si primero me autentico mediante formularios de autenticación con un navegador web.
  • Pero cuando intento acceder al servicio WCF con wcfTestClient.exe, aparece el siguiente error:

Error:No se pueden obtener metadatos de http://localhost/Services/MyService.svcSi este es un servicio de Windows (R) Communication Foundation al que tiene acceso, verifique que haya habilitado la publicación de metadatos en la dirección especificada.Para obtener ayuda para habilitar la publicación de metadatos, consulte la documentación de MSDN en http://go.microsoft.com/fwlink/?LinkId=65455.WS-MetadataError de cambio

¿Fue útil?

Solución 3

Muchas gracias a todos los que trataron de responder a esta pregunta.

Después de horas de solucionar este problema, descubrí que un módulo de autenticación personalizado estaba rechazando mi cliente intenta obtener los metadatos. Baste decir, que necesitaba recorrido por esta lógica.

Oh - Y paso a paso por el código es muy subestimado . ;)

Otros consejos

¿Tiene una mex endpoint definido en su web.config para el servicio? El TestClient es probable que esta buscando.

Si lo hace, otra posibilidad es desactivar autorización en la carpeta de servicios. Nunca he probado esto, pero en teoría es posible que funcione ...

Así que si el sitio web es localhost, poner en servicio WCF localhost/services/myservice.svc o similares. A continuación, añadir un web.config en la carpeta /services, que anula la autorización y permite a todos:

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>

Si puede colocar su archivo .svc en una subcarpeta del directorio virtual, puede aprovechar el camino atributo en Autenticación de formularios para permitir el acceso a él con un nivel diferente de autorización. Aquí hay un tutorial.

Asumo dado que está utilizando la autenticación de formularios que el directorio virtual está configurado para el acceso anónimo en IIS. Dicho esto, si usted pone su servicio WCF, por ejemplo, * Archivo de .svc en su propio directorio, se puede actualizar el archivo web.config principal y añadir una etiqueta de ubicación para desactivar la autenticación de formularios para el directorio que contiene el servicio. También asegúrese de disbale de seguridad a través de la configuración de la sección <system.servicemodel> del web.config vinculante configuración de WCF que necesita ser añadido si no está ya presente:

<bindings>
  <wsHttpBinding>   <!-- one of many possible bindings -->
    <binding name="...">          
      <security mode="None"> <-- allows anonymous access -->
        <message clientCredentialType="None"/> <-- allows anonymous access -->
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top