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 address
parâmetros , contract
, binding
contractNamespace
e 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.