Procedura: utilizzare il moniker servizio di Windows Communication Foundation senza registrazione
Per connettersi a un servizio Windows Communication Foundation (WCF) e comunicare con esso, un'applicazione client WCF deve disporre dei dettagli sull'indirizzo del servizio, la configurazione dell'associazione e il contratto di servizio.
Il moniker servizio WCF ottiene in genere il contratto necessario tramite la precedente registrazione dei tipi di attributo obbligatori, ma ci sono casi in cui ciò non è possibile. Invece che con la registrazione, il moniker può ottenere la definizione del contratto nella forma di un documento WSDL (Web Services Definition Language) tramite l'utilizzo del parametro wsdl o dello scambio metadati, tramite il parametro mexAddress.
Questo consente scenari quali la distribuzione di un foglio di calcolo Excel in cui alcuni dei valori delle celle sono calcolati tramite interazioni di servizi Web. In questo scenario, potrebbe non essere fattibile registrare l'assembly del contratto di servizio su tutti i client che potrebbero aprire il documento. Il parametro wsdl o mexAddress consente una soluzione autonoma.
Nota
È necessario utilizzare l'autenticazione reciproca per proteggersi dalla manomissione o lo spoofing di richieste e risposte. In particolare, è importante per i client assicurarsi che l'endpoint di scambio metadati che sta rispondendo sia la parte attendibile prevista.
Esempio
In questo esempio viene illustrato l'utilizzo del moniker servizio con un contratto MEX. Un servizio con il contratto seguente viene esposto con un wsHttpBinding.
using System.ServiceModel;
...
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Demo")]
public interface IAffiliate
{
[OperationContract]
bool NewAffiliate(string ID, string company, string fullname, string accountsCode);
[OperationContract]
bool RemoveAffiliate(string ID);
[OperationContract]
double RevenueCheckMonthly(ref string ID);
[OperationContract]
double RevenueCheckTotal(ref string ID);
}
Per creare un client WCF per il servizio remoto è possibile utilizzare la stringa del moniker di esempio seguente.
service:mexAddress="https://servername/Affiliates/service.svc/mex",
address="https://servername/Affiliates/service.svc",
contract=IAffiliate, contractNamespace=http://Microsoft.ServiceModel.Demo,
binding=WSHttpBinding_IAffiliate, bindingNamespace=http://tempuri.org/
Durante l'esecuzione dell'applicazione client, il client esegue un WS-MetadataExchange con l'elemento mexAddress fornito. Questa operazione potrebbe restituire dettagli sull'indirizzo, l'associazione e il contratto per diversi servizi. I parametri address, contract, contractNamespace, binding e bindingNamespace vengono utilizzati per identificare il servizio designato. Una volta messi in corrispondenza questi parametri, il moniker crea un client WCF con la definizione di contratto appropriata e possono essere eseguite chiamate utilizzando il client WCF, come con il contratto tipizzato.
Nota
Se il formato del moniker non è valido o se il servizio non è disponibile, la chiamata a GetObject restituirà un errore di sintassi non valida. Se si riceve questo errore, verificare che il moniker che si sta utilizzando sia valido e che il servizio sia disponibile.