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.

È stato utile?

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 -

  1. 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.

  2. 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.

networking

di Windows fornisce limitato servizi basati su IP il filtraggio.

Un firewall vi fornirà tutte le filtraggio è necessario.

Ho fatto il seguito soluzione ..

  1. Crea 2 interfacce per contratto di servizio .. diciamo Let IService1 e IService2.

  2. Attuare questi 2 interfacce per la classe di servizio. Consente nome come Servizio1

  3. Creare una classe di servizio derivata da Service1. Solo una classe derivata vuota.

  4. Crea due diversi elemento di servizio in app.config

  5. 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

  6. 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.

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