Delen via


Procedure: De Moniker van de Windows Communication Foundation-service gebruiken zonder registratie

Als u verbinding wilt maken met en communiceren met een WCF-service (Windows Communication Foundation), moet een WCF-clienttoepassing beschikken over de details van het serviceadres, de bindingsconfiguratie en het servicecontract.

De WCF-service moniker verkrijgt doorgaans het vereiste contract via eerdere registratie van de vereiste kenmerktypen, maar er kunnen gevallen zijn waarin dit niet haalbaar is. In plaats van registratie kan de moniker de definitie van het contract verkrijgen in de vorm van een WSDL-document (Web Services Definition Language), via het gebruik van de wsdl parameter of via Metadata Exchange, via het gebruik van de mexAddress parameter.

Dit maakt scenario's mogelijk, zoals de distributie van een Excel-spreadsheet waarbij sommige celwaarden worden berekend via webservice-interacties. In dit scenario is het mogelijk niet haalbaar om de assembly van het servicecontract te registreren voor alle clients die het document kunnen openen. De wsdl parameter of de mexAddress parameter maakt een zelfstandige oplossing mogelijk.

Notitie

Wederzijdse verificatie moet worden gebruikt om bescherming te bieden tegen manipulatie van aanvragen en antwoorden of adresvervalsing. Het is met name belangrijk dat clients er zeker van zijn dat het Exchange-eindpunt voor metagegevens die reageert de beoogde vertrouwde partij is.

Opmerking

In dit voorbeeld ziet u het gebruik van de service moniker met een MEX-contract. Een service met het volgende contract wordt weergegeven met een 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);  
}  

Als u een WCF-client wilt maken voor de externe service, kan de volgende voorbeeldtekenreeks voor moniker worden gebruikt.

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/  

Tijdens de uitvoering van de clienttoepassing voert de client een WS-MetadataExchange met de opgegeven mexAddress. Dit kan het adres, de bindings- en contractgegevens voor een aantal services retourneren. De address, contracten contractNamespacebindingbindingNamespace parameters worden gebruikt om de beoogde service te identificeren. Zodra deze parameters overeenkomen, bouwt de moniker een WCF-client met de juiste contractdefinitie en kan de aanroepen vervolgens worden uitgevoerd met behulp van de WCF-client, zoals bij het getypte contract.

Notitie

Als de moniker ongeldig is of als de service niet beschikbaar is, retourneert de aanroep om een fout te GetObject retourneren met de tekst 'Ongeldige syntaxis'. Als u deze fout ontvangt, controleert u of de moniker die u gebruikt juist is en of de service beschikbaar is.

Zie ook