Servizio WCF rilegatura utilizzando allowInsecureTransport = vere cause di aggiornamento Servizio di riferimento nel client di fallire

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

Domanda

Questa è la mia configurazione del servizio nel web.config:

<binding name="statefulSessionWithUsernameOverTransport">
  <security authenticationMode="SecureConversation"
    requireSecurityContextCancellation="False" allowInsecureTransport="True">
    <secureConversationBootstrap authenticationMode="UserNameOverTransport"/>
  </security>
  <binaryMessageEncoding />
  <httpTransport />
</binding>

<service name="com.example.FooService"
  behaviorConfiguration="usernamePasswordAuthBehavior">
  <endpoint contract="com.example.FooService.IFooService"
    address="custom" binding="customBinding"
    bindingConfiguration="statefulSessionWithUsernameOverTransport" />
</service>

Io sono la creazione allowInsecureTransport = true perché in produzione il Servizio verrà eseguito dietro un Load Balancer SSL di terminazione. Chiamando il servizio dai miei NET 4.0 works client senza problemi ma cercando di aggiornare il riferimento al servizio in VS2010 sempre si traduce in un errore:

  

System.ServiceModel.Channels.TransportSecurityBindingElement   Errore: la politica di sicurezza Export fallito. The Binding contiene un TransportSecurityBindingElement ma non la sicurezza dei trasporti elemento vincolante che implementa ITransportTokenAssertionProvider. esportazione politica per tale esportazione la politica non è supportata. *

Capisco quello che sta cercando di dirmi - che è fondamentalmente che ho la sicurezza dei trasporti disabilitata su un legame che lo richiede per non compromettere le credenziali che viaggiano sul filo. Ma - questo è il punto centrale di allowInsecureTransport . Potrebbe essere che il generatore di proxy non è semplicemente a conoscenza di questo attributo?

Aggiornamento:

Sembra che il generatore WSDL è infatti in grado di affrontare con l'attributo. Ho dovuto tornare al messaggio del livello di sicurezza e di un certificato autofirmato per lo sviluppo. Utilizzando Message Security aveva il vantaggio di essere in grado di attenersi a Cassini per lo sviluppo invece di andare in piena regola IIS.

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>
È stato utile?

Soluzione

mi sono imbattuto in questo stesso problema. Il problema sembra essere il trasporto HTTP, perché non implementa l'interfaccia ITransportTokenAssertionProvider, ma https fa. Sono stato in grado di aggirare questo in due modi: passa vincolante di usare https trasporti, che implementa l'interfaccia mia abitudine, e aggiungere enableUnsecuredResponse = "true" per l'elemento di sicurezza nella configurazione, o scrivere un legame derivante da HttpTransportBindingElement ma attuare il costume l'interfaccia necessaria.

Altri suggerimenti

Ho letto di questo paio di volte (ad esempio qui o qui ), ma non ho mai tryed esso. Sembra un bug nel WSDL di esportazione perché quando si configura il servizio e client manualmente dovrebbe funzionare, ma l'esportazione metadati non funziona. Secondo link proporre qualche soluzione, ma è il brutto.

La mia proposta è quella di sviluppare con allowInsecureTransport impostato su false e HTTPS con certificato di collaudo e attivare questa configurazione quando si distribuisce l'applicazione (può essere parte del pacchetto di installazione).

mi sono imbattuto in un problema simile. Ho installato hot fix per .NET Framework 3.5 sulle macchine client, e ha funzionato dopo.

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