Partilhar via


Como: Usar o Windows Communication Foundation Service Moniker sem registro

Para se conectar e se comunicar com um serviço WCF (Windows Communication Foundation), um aplicativo cliente WCF deve ter os detalhes do endereço de serviço, a configuração de associação e o contrato de serviço.

O moniker de serviço WCF normalmente obtém o contrato necessário por meio do registro prévio dos tipos de atributos necessários, mas pode haver casos em que isso não seja viável. No lugar do registro, o moniker pode obter a definição do contrato na forma de um documento Web Services Definition Language (WSDL), através do uso do parâmetro ou através do wsdl Metadata Exchange, através do uso do mexAddress parâmetro.

Isso permite cenários como a distribuição de uma planilha do Excel onde alguns dos valores de célula são calculados por meio de interações de serviço Web. Nesse cenário, pode não ser viável registrar o assembly do contrato de serviço em todos os clientes que podem abrir o documento. O wsdl parâmetro ou o mexAddress parâmetro permite uma solução independente.

Nota

A autenticação mútua deve ser usada para proteger contra adulteração ou falsificação de solicitações e respostas. Especificamente, é importante que os clientes tenham certeza de que o ponto de extremidade do Metadata Exchange que está respondendo é a parte confiável pretendida.

Exemplo

Este exemplo mostra o uso do moniker de serviço com um contrato MEX. Um serviço com o seguinte contrato é exposto com um 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);  
}  

Para construir um cliente WCF para o serviço remoto, a cadeia de caracteres de moniker de exemplo a seguir pode ser usada.

service4:mexAddress="http://servername/Affiliates/service.svc/mex",  
address="http://servername/Affiliates/service.svc",  
contract=IAffiliate, contractNamespace=http://Microsoft.ServiceModel.Demo,  
binding=WSHttpBinding_IAffiliate, bindingNamespace=http://tempuri.org/  

Durante a execução do aplicativo cliente, o cliente executa um WS-MetadataExchange com o fornecido mexAddress. Isso pode retornar o endereço, a vinculação e os detalhes do contrato de uma série de serviços. Os addressparâmetros , contract, bindingcontractNamespacee bindingNamespace são usados para identificar o serviço pretendido. Uma vez que esses parâmetros tenham sido correspondidos, o moniker constrói um cliente WCF com a definição de contrato apropriada e as chamadas podem ser feitas usando o cliente WCF, como com o contrato digitado.

Nota

Se o moniker estiver malformado ou se o serviço não estiver disponível, a chamada para GetObject retornará um erro dizendo "Sintaxe inválida". Se você receber esse erro, verifique se o moniker que você está usando está correto e se o serviço está disponível.

Consulte também