Domanda

Faccio fatica a far funzionare il servizio WCF su IIS sul nostro server. Dopo la distribuzione finisco con un messaggio di errore:

Le impostazioni di sicurezza per questo servizio richiedono l'autenticazione 'Anonima' ma non è abilitata per l'applicazione IIS che ospita questo servizio.

Voglio usare l'autenticazione di Windows e quindi ho l'accesso anonimo disabilitato. Si noti inoltre che esiste aspNetCompatibilityEnabled (se ciò fa la differenza).

Ecco il mio 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>

Ho cercato su Internet senza fortuna. Tutti gli indizi sono molto apprezzati.

È stato utile?

Soluzione

Quindi sembra un problema piuttosto comune. Il punto è rimuovere mex dai tuoi attacchi:

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

In alternativa abiliti l'accesso anonimo in IIS e nel tuo web.config ti assicuri che l'accesso anonimo sia negato.

Spero che questo possa aiutare qualche altra anima. (Ero sicuro al 100% di averlo provato con mex rimosso.: -O)

Altri suggerimenti

Puoi controllare questo one . Sono riuscito a farlo funzionare come previsto.

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

usa anche i tuoi collegamenti di servizio anche per mex.

Quindi cambia la tua configurazione attuale:

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

a

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

Questo dovrebbe risolvere il problema

L'autenticazione anonima può e, in alcuni casi, deve essere abilitata per il servizio ma non per il sito.

Quindi controlla che il tuo sito " root " l'autenticazione ha solo l'autenticazione di Windows abilitata. Quindi espandi il tuo sito, seleziona la cartella "service" e assicurati che il tuo servizio abbia abilitato Windows e l'autenticazione anonima.

Avevo un ambiente identico in cui funzionava, l'unica differenza in questi ambienti era l'autenticazione del servizio. Nel mio caso il problema non è stato causato da provider selezionati (Ntlm o Negoziati) ma dalle impostazioni di autenticazione per sito e servizio.

Almeno ho avuto un identico messaggio di errore con il sito Web MSSQL Master Data Services & amp; servizio e questa era la soluzione. Ho ricevuto l'errore quando eseguivo solo il servizio ma il sito funzionava quasi bene, MDS Explorer non funzionava perché le impostazioni di autenticazione del servizio erano inizialmente errate. La causa di questa mancata configurazione potrebbe essere un bug in MDS Configuration Manager durante la creazione di un nuovo sito MDS?

Quindi, nel mio caso, il problema non doveva essere risolto facendo alcuna modifica speciale al file web.config né ai file ApplicationHost.config, non ho fatto nessuna modifica ai file di configurazione. Ho appena selezionato le impostazioni di autenticazione corrette per il sito Web ed è il servizio nel gestore IIS. Non sono sicuro che questo sia il caso qui, ma forse vale la pena provarlo?

Ha funzionato per me quando ho rimosso l'endpoint 'mex' e ho anche impostato clientCredentialType = 'Ntlm' Stavo ospitando il mio WCF all'interno di SharePoint.

Sì, sembra che sia necessario rimuovere completamente l'endpoint mex. Impostazione

<serviceMetadata httpGetEnabled="false"/>

da solo non ha funzionato. Grazie!

Soluzione aggiuntiva:

Devi solo assicurarti che il nome del servizio e il contratto siano corretti.

Spero che aiuti in qualche modo.

Sembra che questo problema di associazione MEX sia stato risolto in .NET 4.0. La modifica della versione CLR del pool di app del nostro server da 2.0 a 4.0 ha risolto il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top