Gör så här: Använd Windows Communication Foundation Service Moniker utan registrering
För att ansluta till och kommunicera med en WCF-tjänst (Windows Communication Foundation) måste ett WCF-klientprogram ha information om tjänstadressen, bindningskonfigurationen och tjänstkontraktet.
WCF-tjänstens moniker erhåller vanligtvis det nödvändiga kontraktet genom förhandsregistrering av de attributtyper som krävs, men det kan finnas fall där detta inte är möjligt. I stället för registrering kan monikern hämta definitionen av kontraktet i form av ett WSDL-dokument (Web Services Definition Language), genom att använda parametern wsdl
eller via Metadata Exchange, med hjälp av parametern mexAddress
.
Detta möjliggör scenarier som distribution av ett Excel-kalkylblad där vissa av cellvärdena beräknas via webbtjänstinteraktioner. I det här scenariot är det kanske inte möjligt att registrera servicekontraktssammansättningen på alla klienter som kan öppna dokumentet. Parametern wsdl
eller parametern mexAddress
möjliggör en fristående lösning.
Kommentar
Ömsesidig autentisering måste användas för att skydda mot manipulering eller förfalskning av begäranden och svar. Mer specifikt är det viktigt för klienter att vara säkra på att den Metadata Exchange-slutpunkt som svarar är den avsedda betrodda parten.
Exempel
Det här exemplet visar användningen av tjänstmonikern med ett MEX-kontrakt. En tjänst med följande kontrakt exponeras med ett 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);
}
Om du vill skapa en WCF-klient för fjärrtjänsten kan följande monikersträngexempel användas.
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/
Under körningen av klientprogrammet utför klienten en WS-MetadataExchange
med den angivna mexAddress
. Detta kan returnera adress-, bindnings- och kontraktsinformation för ett antal tjänster. Parametrarna address
, contract
, contractNamespace
och bindingNamespace
binding
används för att identifiera den avsedda tjänsten. När dessa parametrar har matchats skapar monikern en WCF-klient med lämplig kontraktsdefinition och anrop kan sedan göras med hjälp av WCF-klienten, som med det typerade kontraktet.
Kommentar
Om monikern är felaktigt formaterad eller om tjänsten inte är tillgänglig returnerar anropet till GetObject
ett fel med texten "Ogiltig syntax". Om du får det här felet kontrollerar du att monikern du använder är korrekt och att tjänsten är tillgänglig.