Pregunta

Estoy luchando mucho para que el servicio WCF se ejecute en IIS en nuestro servidor. Después de la implementación, termino con un mensaje de error:

La configuración de seguridad para este servicio requiere autenticación 'anónima' pero no está habilitada para la aplicación IIS que aloja este servicio.

Quiero usar la autenticación de Windows y, por lo tanto, tengo el acceso anónimo deshabilitado. También tenga en cuenta que hay aspNetCompatibilityEnabled (si eso hace alguna diferencia).

Aquí está mi web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
        <webHttpBinding>
            <binding name="default">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="defaultServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
             contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
        </service>
    </services>
</system.serviceModel>

He buscado en internet sin suerte. Cualquier pista es muy apreciada.

¿Fue útil?

Solución

Entonces parece un problema bastante común. El punto es eliminar mex de tus enlaces:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

Alternativamente, habilita el acceso anónimo en IIS y en su web.config, se asegura de que se deniegue el acceso anónimo.

Espero que esto ayude a alguna otra alma. (Estaba 100% seguro de que lo intenté con mex eliminado.: -O)

Otros consejos

Puede verificar esto one . Logré hacerlo funcionar como se esperaba.

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>

solo use sus enlaces de servicio para mex también.

Cambia tu configuración actual:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

a

<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>

Eso debería resolver el problema

La autenticación anónima puede, y en algunos casos debe estar habilitada para el servicio pero no para el sitio.

Por lo tanto, compruebe que la raíz de su sitio la autenticación solo tiene habilitada la autenticación de Windows. Luego expanda su sitio, seleccione la carpeta 'servicio' y asegúrese de que su servicio tenga habilitada la autenticación anónima y Windows.

Tenía un entorno idéntico donde esto funcionaba, la única diferencia en estos entornos era la autenticación del servicio. El problema en mi caso no fue causado por proveedores seleccionados (Ntlm o Negotiate) sino por la configuración de autenticación para el sitio y el servicio.

Al menos tuve un mensaje de error idéntico con el sitio web básico MSSQL Master Data Services & amp; servicio y esta fue la solución. Obtuve el error al ejecutar solo el servicio, pero el sitio funcionó casi bien, MDS Explorer no funcionó porque la configuración de autenticación del servicio era incorrecta al principio. ¿Causa de esta configuración incorrecta podría ser un error en el Administrador de configuración de MDS al crear un nuevo sitio de MDS?

Entonces, en mi caso, el problema no se solucionó haciendo ninguna edición especial en los archivos web.config ni ApplicationHost.config, no edité los archivos de configuración. Acabo de seleccionar la configuración de autenticación correcta para el sitio web y su servicio en el administrador de IIS. No estoy seguro de que este sea el caso aquí, pero ¿vale la pena intentarlo?

Funcionó para mí cuando elimino el punto final 'mex' y también establezco clientCredentialType = 'Ntlm' Estaba alojando mi WCF dentro de SharePoint.

Sí, parece que necesita eliminar el punto final mex por completo. Configuración

<serviceMetadata httpGetEnabled="false"/>

solo no funcionó. Gracias!

Solución adicional:

Solo debe asegurarse de que el nombre del servicio y el contrato sean correctos.

Espero que ayude de alguna manera.

Parece que este problema vinculante de MEX se solucionó en .NET 4.0. Cambiar la versión de nuestro grupo de aplicaciones .NET CLR de 2.0 a 4.0 solucionó el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top