Come posso esporre un servizio WCF in una directory virtuale w / o autenticazione basata su form?
-
19-09-2019 - |
Domanda
Il mio gruppo costruisce ospitato internamente ASP.NET MVC siti web con le forme-autenticazione.
mi piacerebbe ospitare un servizio WCF nella stessa directory virtuale come un sito web ASP.NET MVC.
La mia domanda:
Come faccio a fare il servizio WCF liberamente accessibili, cioè senza forme-autenticazione.
La mia situazione attuale è questa:
- posso accedere al .svc e visualizzare le informazioni WSDL se prima l'autenticazione tramite moduli di autenticazione con un browser web.
- Ma quando provo ad accedere al servizio WCF con wcfTestClient.exe, ottengo il seguente errore:
Errore: Impossibile ottenere i metadati da http: //localhost/Services/MyService.svc Se questo è un (R) Windows Communication servizio di Fondazione a cui si ha accesso, si prega di verificare di avere permesso la pubblicazione dei metadati al indirizzo specificato. Per informazioni permettendo la pubblicazione dei metadati, fare riferimento alla la documentazione MSDN all'indirizzo http://go.microsoft.com/fwlink/?LinkId=65455. WS-Metadata Errore di scambio
Soluzione 3
Molte grazie a tutti coloro che hanno cercato di rispondere a questa domanda.
Dopo ore di risoluzione di questo problema, ho scoperto che un modulo di autenticazione personalizzato stava rifiutando il mio cliente tenta di ottenere i metadati. Basti dire, avevo bisogno di percorso intorno a questa logica.
Oh - e passando attraverso il codice è molto sottovalutato . ;)
Altri suggerimenti
Avete un mex endpoint
definito nel web.config per il servizio? Il TestClient è probabile alla ricerca di questo.
Se lo fai, un'altra possibilità è quella di disabilitare autorizzazione sulla cartella Servizi. Non ho mai provato questo, ma in teoria potrebbe funzionare ...
Quindi, se il sito è localhost
, messa in servizio WCF localhost/services/myservice.svc
o simili. Quindi aggiungere un web.config nella cartella /services
, che sostituisce l'autorizzazione e permette a tutti:
<configuration>
<authorization>
<allow users="*" />
</authorization>
</configuration>
Se si può mettere il file .svc in una sottocartella della directory virtuale, è possibile sfruttare la path attributo autenticazione basata su form per consentire l'accesso ad essa con un diverso livello di autorizzazione. Ecco un tutorial .
Presumo dal momento che si sta utilizzando l'autenticazione forme che la directory virtuale è configurato per l'accesso anonimo in IIS. Detto questo, se si posiziona il servizio WCF per esempio * File .svc nella propria directory, è possibile aggiornare il file web.config principale e aggiungere un tag di percorso per disabilitare l'autenticazione moduli per la directory che contiene il servizio. Anche essere sicuri di disbale sicurezza attraverso la configurazione di WCF impostazioni nella sezione <system.servicemodel>
del web.config vincolante che deve essere aggiunto, se non è già 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>