Domanda

Ho 2 contratti (Ca & CB) attuati da un singolo servizio WCF con 2 punti finali (EPA & EPB).

Questa è non per motivi di sicurezza, ma puramente per motivi di chiarezza / organizzazione, mi piacerebbe solo "vedere" le operazioni di contratta quando scopro il servizio via endpointA; e allo stesso modo, solo vedere le operazioni di ContractB via endpointB.

Non ho bisogno di "proteggere" le operazioni di per sé. Lo scenario è tale che ogni dato cliente ha bisogno di un solo "lato" del servizio, non sia (ma, le operazioni stesse condividere le risorse, quindi ha senso avere un unico servizio piuttosto che 2 servizi).

Sembra che un dato servizio ottiene fondamentalmente 1 WSDL, ergo tutte le operazioni sono esposti a tutti gli endpoint. E 'questo il modo in cui funziona, o c'è un modo per "forma" un endpoint da operazioni non definiti dal contratto endpoint occludere?

È stato utile?

Soluzione

Per impostazione predefinita, hai ragione - classe di implementazione un servizio ottiene un WSDL che contiene tutti i metodi di servizio (da tutti i contratti di servizio) che questo servizio implementa classe

.

Non ci sono modi presente (per quanto ne so) per "forma" il WSDL in qualsiasi (facile) modo - WCF non offre modi per entrare nel processo di creazione del WSDL (statico o dinamico), ma quelle Aren 't per i deboli di cuore. Sarebbe molto più facile per voi per dividere solo l'attuazione dei contratti di servizio in due classi separate e poi si sarebbe avere due servizi distinti, WSDL di separati e tutti.

Altri suggerimenti

Marc è absolutelly destra. Sto solo aggiungendo il motivo per cui questo accade in WCF. In tutti i metadati WCF funzionalità correlate sono basati intorno comportamento dei metadati di servizio e degli endpoint mex. Entrambe queste caratteristiche sono definite a livello di servizio. Così non si può prendere più alto granuality (a meno che non si scrive un sacco di codice personalizzato) e specificare i metadati per ogni punto finale.

servizio WCF (classe) è direttamente mappata wsdl: elemento di servizio che espone ciascun contratto come wsdl separato: porta (in WCF nota come punto finale). Questo è il punto principale di rispondere alla tua domanda. Se non si desidera che il secondo contratto in quel wsdl: servizio non è possibile implementare nella stessa classe.

Hai detto che i contratti di servizio condividono risorse. In quel caso il vostro servizio WCF probabilmente contiene anche la logica di business. Questo è un motivo per i vostri problemi. Il buon design per l'attuazione di servizi WCF è quello di creare loro solo come wrapper per le classi logica di business distinte.

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