Narzędzie ServiceModel Metadata Tool (Svcutil.exe) generuje kod klienta i plik konfiguracji aplikacji klienckiej do użycia w tworzeniu aplikacji klienckich. Ten temat zawiera przewodnik po wygenerowanych przykładach kodu dla standardowych scenariuszy kontraktów usług. Aby uzyskać więcej informacji na temat tworzenia aplikacji klienckiej przy użyciu wygenerowanego kodu, zobacz Omówienie klienta WCF.
Omówienie
Jeśli używasz programu Visual Studio do generowania typów klientów programu Windows Communication Foundation (WCF) dla projektu, zazwyczaj nie trzeba badać wygenerowanego kodu klienta. Jeśli nie używasz środowiska programistycznego, które wykonuje te same usługi, możesz użyć narzędzia, takiego jak Svcutil.exe, aby wygenerować kod klienta, a następnie użyć tego kodu do tworzenia aplikacji klienckiej.
Ponieważ Svcutil.exe ma wiele opcji modyfikujących wygenerowane informacje o typie, w tym temacie nie omówiono wszystkich scenariuszy. Jednak następujące standardowe zadania obejmują lokalizowanie wygenerowanego kodu:
Identyfikowanie interfejsów kontraktów usług.
Identyfikowanie klasy klienta WCF.
Identyfikowanie typów danych.
Identyfikowanie kontraktów wywołania zwrotnego dla usług dwukierunkowych.
Identyfikowanie interfejsu kanału kontraktu usługi pomocnika.
Znajdowanie interfejsów kontraktów usług
Aby zlokalizować interfejsy modelujące kontrakty usług, wyszukaj interfejsy oznaczone atrybutem System.ServiceModel.ServiceContractAttribute . Często ten atrybut może być trudny do zlokalizowania z szybkim odczytem ze względu na obecność innych atrybutów i jawnych właściwości ustawionych na samym atrybucie. Pamiętaj, że interfejs kontraktu usługi i interfejs kontraktu klienta są dwoma różnymi typami. Poniższy przykład kodu przedstawia oryginalny kontrakt usługi.
Aby zlokalizować klasę klienta WCF, która implementuje kontrakt usługi, którego chcesz użyć, wyszukaj rozszerzenie , gdzie parametr typu jest interfejsem kontraktu System.ServiceModel.ClientBase<TChannel>usługi, który został wcześniej zlokalizowany i który rozszerza ten interfejs. Poniższy przykład kodu przedstawia klasę ClientBase<TChannel> typu ISampleService.
Możesz użyć tej klasy klienta WCF, tworząc nowe wystąpienie i wywołując metody, które implementuje. Metody te wywołują operację usługi, z którą została zaprojektowana i skonfigurowana do interakcji. Aby uzyskać więcej informacji, zobacz Omówienie klienta programu WCF.
Uwaga
Gdy SvcUtil.exe generuje klasę klienta WCF, dodaje element DebuggerStepThroughAttribute do klasy klienta, który uniemożliwia debugerom przechodzenie przez klasę klienta WCF.
Znajdowanie typów danych
Aby zlokalizować typy danych w wygenerowanym kodzie, najbardziej podstawowym mechanizmem jest zidentyfikowanie nazwy typu określonej w umowie i wyszukanie kodu dla tej deklaracji typu. Na przykład poniższy kontrakt określa, że SampleMethod może zwrócić błąd PROTOKOŁU SOAP typu microsoft.wcf.documentation.SampleFault.
[assembly: System.Runtime.Serialization.ContractNamespaceAttribute(
"http://microsoft.wcf.documentation",
ClrNamespace = "microsoft.wcf.documentation"
)]
namespacemicrosoft.wcf.documentation
{
using System.Runtime.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute()]
publicpartialclassSampleFault : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
privatestring FaultMessageField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
returnthis.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
publicstring FaultMessage
{
get
{
returnthis.FaultMessageField;
}
set
{
this.FaultMessageField = value;
}
}
}
}
W takim przypadku typ danych to typ szczegółów zgłaszany przez określony wyjątek na kliencie, gdzie FaultException<TDetail> parametr typu szczegółów to microsoft.wcf.documentation.SampleFault. Aby uzyskać więcej informacji na temat typów danych, zobacz Określanie transferu danych w kontraktach usług. Aby uzyskać więcej informacji na temat obsługi wyjątków na klientach, zobacz Wysyłanie i odbieranie błędów.
Znajdowanie kontraktów wywołania zwrotnego dla usług dwuduplekowych
<System.ServiceModel.OperationContractAttribute(IsOneWay:=True, _
Action:="http://microsoft.wcf.documentation/SampleDuplexHello/Hello")> _
Sub Hello(ByVal greeting As String)
End Interface 'SampleDuplexHello
Wyszukiwanie tego kontraktu wywołania zwrotnego lokalizuje następujący interfejs, który musi zaimplementować aplikacja kliencka.
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
Public Interface SampleDuplexHelloCallback
<System.ServiceModel.OperationContractAttribute( _
IsOneWay:=True, _
Action:="http://microsoft.wcf.documentation/SampleDuplexHello/Reply")> _
Sub Reply(ByVal responseToGreeting As String)
End Interface 'SampleDuplexHelloCallback
Znajdowanie interfejsów kanału kontraktu usługi
W przypadku korzystania z ChannelFactory klasy z interfejsem kontraktu usługi należy rzutować go do interfejsu System.ServiceModel.IClientChannel , aby jawnie otworzyć, zamknąć lub przerwać kanał. Aby ułatwić pracę, narzędzie Svcutil.exe generuje również interfejs pomocnika, który implementuje zarówno interfejs kontraktu usługi, jak i IClientChannel umożliwia interakcję z infrastrukturą kanału klienta bez konieczności rzutowania. Poniższy kod przedstawia definicję kanału klienta pomocnika, który implementuje poprzedni kontrakt usługi.
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.
Dowiedz się więcej o narzędziu ServiceModel Metadata Utility, które generuje kod modelu usługi WFC na podstawie dokumentów metadanych i dokumentów metadanych z kodu modelu usługi.
Omówienie narzędzia Microsoft WCF dotnet-svcutil, które dodaje funkcje dla projektów .NET Core i ASP.NET Core, podobnie jak narzędzie WCF svcutil dla projektów programu .NET Framework.