Limitare l'applicazione client per consumare servizio WCF su un solo endpoint
-
16-10-2019 - |
Domanda
ho sviluppato un servizio WCF avere due contratti contratto1 e Contract2 esposti su due punti finali differenti. Quando ho intenzione di aggiungere il riferimento alla mia applicazione client mi permette di consumare entrambi i contratti.
Come faccio a limitare l'applicazione client di consumare un solo contratto?
qui è il codice del mio web.config
<system.serviceModel>
<services>
<service behaviorConfiguration="MyWCFService.Service1Behavior"
name="MyWCFService.Service1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:1010/Service1.svc"/>
</baseAddresses>
</host>
<endpoint address="/MyService1" binding="wsHttpBinding" contract="MyWCFService.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="/MyService2" binding="wsHttpBinding" contract="MyWCFService.IService2" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyWCFService.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Grazie in anticipo.
Soluzione
perché non rompere singolo endpoint webservice con 2 contratti in due punti finali webservice su diversi indirizzi e 1 contratto per ogni e utilizzare una sola nell'applicazione client.
Il suo chiaro perché il vostro disegno richiede 2 contratti su 1 endpoint, consentendo solo client di utilizzare 1 contratto.
O aggiungere un po 'di sicurezza, forse alcune cose piuttosto di base come campo password metti in metodo di firme a contratto che si desidera trattenere l'accesso.
Altri suggerimenti
mi viene in mente due modi -
-
Primo modo sarebbe utilizzando firewall per bloccare la seconda URL del servizio. Sarebbe utile se si sceglie l'indirizzo di base diversa (forse porto o intestazione host). Ancora un'altra variante potrebbe essere quella di ospitare la seconda servizio nella diversa applicazione / sito e bloccare un accesso esterno. Separare il servizio anche un senso di separare i punti di metadati (mex) di fascia - come corrente punto finale in comune avrebbe pubblicato WSDL per entrambi i servizi - non ha senso pubblicare i metadati per il servizio web secondo (oltre il punto finale pubblico) se non lo fai desiderio a consumare da altri.
-
In secondo modo sarebbe contare sulla sicurezza web service - in sostanza, rendere il vostro servizio web secondo con le credenziali che non sono pubblicati a soggetti esterni.
IIS fornisce limited servizi basati su IP il filtraggio.
networkingdi Windows fornisce limitato servizi basati su IP il filtraggio.
Un firewall vi fornirà tutte le filtraggio è necessario.
Ho fatto il seguito soluzione ..
-
Crea 2 interfacce per contratto di servizio .. diciamo Let IService1 e IService2.
-
Attuare questi 2 interfacce per la classe di servizio. Consente nome come Servizio1
-
Creare una classe di servizio derivata da Service1. Solo una classe derivata vuota.
-
Crea due diversi elemento di servizio in app.config
-
nel primo servizio, creare il punto finale con un po 'l'indirizzo e vincolanti e fornire IService1 come contratto. Avrà un proprio indirizzo di base
-
nel 2 ° servizio di creare il punto finale con un po 'diverso indirizzo e vincolante e fornire IService2 come contratto. Si disponga di un proprio indirizzo di base che sarà diverso.
Ora condividere ogni dell'indirizzo al cliente secondo la vostra scelta.