Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nástroj ServiceModel Metadata Utility (Svcutil.exe) generuje kód klienta a konfigurační soubor klientské aplikace pro použití při sestavování klientských aplikací. Toto téma obsahuje prohlídku vygenerovaných příkladů kódu pro standardní scénáře kontraktů služeb. Další informace o vytvoření klientské aplikace pomocí vygenerovaného kódu naleznete v tématu Přehled klienta WCF.
Přehled
Pokud pro svůj projekt vygenerujete typy klientů WCF (Windows Communication Foundation), obvykle nemusíte zkoumat vygenerovaný kód klienta. Pokud nepoužíváte vývojové prostředí, které pro vás provádí stejné služby, můžete použít nástroj, jako je Svcutil.exe, k vygenerování klientského kódu a následnému použití tohoto kódu k vývoji klientské aplikace.
Vzhledem k tomu, že Svcutil.exe má řadu možností, které upravují vygenerované informace o typu, toto téma nediskutuje všechny scénáře. Následující standardní úlohy však zahrnují vyhledání vygenerovaného kódu:
Identifikace rozhraní kontraktů služeb
Identifikace klientské třídy WCF
Identifikace datových typů
Identifikace kontraktů zpětného volání pro duplexní služby
Identifikace pomocného rozhraní kanálu kontraktu služeb
Hledání rozhraní kontraktů služeb
Pokud chcete vyhledat rozhraní, která modelují kontrakty služeb, vyhledejte rozhraní označená atributem System.ServiceModel.ServiceContractAttribute . Často může být tento atribut obtížné najít s rychlým čtením z důvodu přítomnosti jiných atributů a explicitních vlastností nastavených na samotný atribut. Mějte na paměti, že rozhraní kontraktů služeb a rozhraní klientského kontraktu jsou dva různé typy. Následující příklad kódu ukazuje původní kontrakt služby.
[ServiceContractAttribute(
Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
[OperationContractAttribute]
[FaultContractAttribute(typeof(microsoft.wcf.documentation.SampleFault))]
string SampleMethod(string msg);
}
Následující příklad kódu ukazuje stejný kontrakt služby jako vygenerovaný Svcutil.exe.
[System.ServiceModel.ServiceContractAttribute(
Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
[System.ServiceModel.OperationContractAttribute(
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethod",
ReplyAction = "http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse"
)]
[System.ServiceModel.FaultContractAttribute(
typeof(microsoft.wcf.documentation.SampleFault),
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault"
)]
string SampleMethod(string msg);
}
Pomocí vygenerovaného rozhraní kontraktu služby spolu s System.ServiceModel.ChannelFactory třídou můžete vytvořit objekt kanálu WCF, se kterým lze vyvolat operace služby. Další informace naleznete v tématu Postupy: Použití ChannelFactory.
Vyhledání klientských tříd WCF
Chcete-li vyhledat klientskou třídu WCF, která implementuje kontrakt služby, který chcete použít, vyhledejte rozšíření System.ServiceModel.ClientBase<TChannel>, kde typ parametr je rozhraní kontraktu služby, které jste dříve našli a které rozšiřuje toto rozhraní. Následující příklad kódu ukazuje ClientBase<TChannel> třídu typu ISampleService.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class SampleServiceClient : System.ServiceModel.ClientBase<ISampleService>, ISampleService
{
public SampleServiceClient()
{
}
public SampleServiceClient(string endpointConfigurationName)
:
base(endpointConfigurationName)
{
}
public SampleServiceClient(string endpointConfigurationName, string remoteAddress)
:
base(endpointConfigurationName, remoteAddress)
{
}
public SampleServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress)
:
base(endpointConfigurationName, remoteAddress)
{
}
public SampleServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)
:
base(binding, remoteAddress)
{
}
public string SampleMethod(string msg)
{
return base.Channel.SampleMethod(msg);
}
}
Tuto třídu klienta WCF můžete použít tak, že vytvoříte novou instanci a zavoláte metody, které implementuje. Tyto metody vyvolávají operaci služby, se kterou je navržena a nakonfigurována pro interakci. Další informace naleznete v tématu Přehled klienta WCF.
Poznámka:
Když SvcUtil.exe vygeneruje klientskou třídu WCF, přidá DebuggerStepThroughAttribute do třídy klienta třídu klienta, která brání ladicímu programu v krokování přes třídu klienta WCF.
Hledání datových typů
Pro vyhledání datových typů ve vygenerovaném kódu je nejzásadnějším mechanismem identifikace názvu typu zadaného ve smlouvě a vyhledání kódu pro deklaraci tohoto typu. Například následující kontrakt určuje, že SampleMethod může vrátit chybu SOAP typu microsoft.wcf.documentation.SampleFault.
[System.ServiceModel.OperationContractAttribute(
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethod",
ReplyAction = "http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse"
)]
[System.ServiceModel.FaultContractAttribute(
typeof(microsoft.wcf.documentation.SampleFault),
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault"
)]
string SampleMethod(string msg);
Vyhledání SampleFault zobrazí následující deklaraci typu.
[assembly: System.Runtime.Serialization.ContractNamespaceAttribute(
"http://microsoft.wcf.documentation",
ClrNamespace = "microsoft.wcf.documentation"
)]
namespace microsoft.wcf.documentation
{
using System.Runtime.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class SampleFault : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private string FaultMessageField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string FaultMessage
{
get
{
return this.FaultMessageField;
}
set
{
this.FaultMessageField = value;
}
}
}
}
V tomto případě datový typ je typ podrobností vyvolaný konkrétní výjimkou klienta, FaultException<TDetail> kde je microsoft.wcf.documentation.SampleFaultparametr typu podrobností . Další informace o datových typech naleznete v tématu Určení přenosu dat v kontraktech služeb. Další informace o zpracování výjimek v klientech naleznete v tématu Odesílání a příjem chyb.
Vyhledání kontraktů zpětného volání pro duplexní služby
Pokud vyhledáte servisní kontrakt, pro který rozhraní kontraktu určuje hodnotu vlastnosti ServiceContractAttribute.CallbackContract , pak tato smlouva určuje duplexní kontrakt. Duplexní kontrakty vyžadují, aby klientská aplikace vytvořila třídu zpětného volání, která implementuje kontrakt zpětného volání, a předala instanci této třídy do System.ServiceModel.DuplexClientBase<TChannel> nebo System.ServiceModel.DuplexChannelFactory<TChannel> používaného ke komunikaci se službou. Další informace o duplexních klientech viz Postupy: Přístup ke službám pomocí duplexního kontraktu.
Následující smlouva určuje kontrakt zpětného volání typu SampleDuplexHelloCallback.
[System.ServiceModel.ServiceContractAttribute(
Namespace="http://microsoft.wcf.documentation",
ConfigurationName="SampleDuplexHello",
CallbackContract=typeof(SampleDuplexHelloCallback),
SessionMode=System.ServiceModel.SessionMode.Required
)]
public interface SampleDuplexHello
{
[System.ServiceModel.OperationContractAttribute(
IsOneWay=true,
Action="http://microsoft.wcf.documentation/SampleDuplexHello/Hello"
)]
void Hello(string greeting);
}
<System.ServiceModel.OperationContractAttribute(IsOneWay:=True, _
Action:="http://microsoft.wcf.documentation/SampleDuplexHello/Hello")> _
Sub Hello(ByVal greeting As String)
End Interface 'SampleDuplexHello
Vyhledávání smlouvy pro zpětné volání určí následující rozhraní, které musí implementovat aplikace klienta.
[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"
)]
void Reply(string responseToGreeting);
}
<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
Hledání rozhraní kanálu smluvních služeb
Při použití ChannelFactory třídy s rozhraním kontraktu služby je nutné přetypovat do System.ServiceModel.IClientChannel rozhraní, aby bylo možné explicitně otevřít, zavřít nebo přerušit kanál. Pro snadnější práci nástroj Svcutil.exe také generuje pomocné rozhraní, které implementuje rozhraní služebního kontraktu a umožňuje vám interagovat s infrastrukturou kanálu klienta pomocí IClientChannel, bez nutnosti přetypování. Následující kód ukazuje definici pomocného klientského kanálu, který implementuje předchozí kontrakt služby.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ISampleServiceChannel : ISampleService, System.ServiceModel.IClientChannel
{
}