Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe), istemci uygulamaları oluştururken kullanılmak üzere istemci kodu ve bir istemci uygulaması yapılandırma dosyası oluşturur. Bu konu başlığında, standart hizmet sözleşmesi senaryoları için oluşturulan kod örneklerine yönelik bir tur sunulmaktadır. Oluşturulan kodu kullanarak bir istemci uygulaması oluşturma hakkında daha fazla bilgi için bkz. WCF İstemcisine Genel Bakış.
Genel Bakış
Projeniz için Windows Communication Foundation (WCF) istemci türleri oluşturmak için Visual Studio kullanıyorsanız, genellikle oluşturulan istemci kodunu incelemeniz gerekmez. Sizin için aynı hizmetleri gerçekleştiren bir geliştirme ortamı kullanmıyorsanız, istemci kodu oluşturmak için Svcutil.exe gibi bir araç kullanabilir ve ardından istemci uygulamanızı geliştirmek için bu kodu kullanabilirsiniz.
Svcutil.exe, oluşturulan tür bilgilerini değiştiren bir dizi seçeneğe sahip olduğundan, bu konu tüm senaryoları ele almaz. Ancak aşağıdaki standart görevler, oluşturulan kodun yerini belirlemeyi içerir:
Hizmet sözleşmesi arabirimlerini tanımlama.
WCF istemci sınıfını tanımlama.
Veri türlerini tanımlama.
Çift yönlü hizmetler için geri çağırma sözleşmelerini tanımlama.
Yardımcı hizmet sözleşmesi kanal arabirimini tanımlama.
Hizmet Sözleşmesi Arabirimlerini Bulma
Hizmet sözleşmelerini modelleyen arabirimleri bulmak için özniteliğiyle System.ServiceModel.ServiceContractAttribute işaretlenmiş arabirimleri arayın. Genellikle diğer özniteliklerin varlığı ve özniteliğin kendisinde ayarlanan açık özellikler nedeniyle bu özniteliğin hızlı okuma ile bulunması zor olabilir. Hizmet sözleşmesi arabiriminin ve istemci sözleşmesi arabiriminin iki farklı tür olduğunu unutmayın. Aşağıdaki kod örneği özgün hizmet sözleşmesini gösterir.
[ServiceContractAttribute(
Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
[OperationContractAttribute]
[FaultContractAttribute(typeof(microsoft.wcf.documentation.SampleFault))]
string SampleMethod(string msg);
}
Aşağıdaki kod örneği, Svcutil.exetarafından oluşturulan hizmet sözleşmesini gösterir.
[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);
}
Hizmet işlemlerinin çağrılacağı bir WCF kanal nesnesi oluşturmak için sınıfıyla System.ServiceModel.ChannelFactory birlikte oluşturulan hizmet sözleşmesi arabirimini kullanabilirsiniz. Daha fazla bilgi için bkz . Nasıl yapılır: ChannelFactory'yi kullanma.
WCF İstemci Sınıflarını Bulma
Kullanmak istediğiniz hizmet sözleşmesini uygulayan WCF istemci sınıfını bulmak için, System.ServiceModel.ClientBase<TChannel> uzantısını arayın, burada tip parametresi daha önce konumlandırdığınız ve bu arabirimi genişleten hizmet sözleşmesi arabirimidir. Aşağıdaki kod örneği, ClientBase<TChannel> türündeki ISampleService sınıfını gösterir.
[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);
}
}
Yeni bir örneği oluşturup uyguladığı yöntemleri çağırarak bu WCF istemci sınıfını kullanabilirsiniz. Bu yöntemler, etkileşime geçmek için tasarlandığı ve yapılandırıldığı hizmet işlemini çağırır. Daha fazla bilgi için bkz . WCF İstemcisi'ne Genel Bakış.
Uyarı
SvcUtil.exe bir WCF istemci sınıfı oluşturduğunda, istemci sınıfına hata ayıklayıcıların WCF istemci sınıfını adımlamasını engelleyen bir DebuggerStepThroughAttribute ekler.
Veri Türlerini Bulma
Oluşturulan koddaki veri türlerini bulmak için en temel mekanizma, bir sözleşmede belirtilen tür adını tanımlamak ve kodda bu tür bildirimini aramaktır. Örneğin, aşağıdaki sözleşme öğesinin SampleMethod türünde microsoft.wcf.documentation.SampleFaultbir SOAP hatası döndürebileceğini belirtir.
[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);
SampleFault arandığında aşağıdaki tür bildirimi bulunur.
[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;
}
}
}
}
Bu durumda veri türü, istemcide belirli bir özel durum tarafından atılan ayrıntı türüdür ve FaultException<TDetail> burada ayrıntı türü parametresi olur microsoft.wcf.documentation.SampleFault. Veri türleri hakkında daha fazla bilgi için bkz. Hizmet Sözleşmelerinde Veri Aktarımı Belirtme. İstemcilerdeki özel durumları işleme hakkında daha fazla bilgi için bkz. Gönderme ve Alma Hataları.
Çift Yönlü Hizmetler için Geri Arama Sözleşmelerini Bulma
Eğer sözleşme arabiriminin ServiceContractAttribute.CallbackContract özelliği için bir değer belirttiği bir hizmet sözleşmesi bulursanız, bu sözleşme bir çift yönlü sözleşme demektir. Çift yönlü anlaşmalar, istemci uygulamasının geri çağırma sözleşmesini uygulayan bir geri çağırma sınıfı oluşturmasını ve bu sınıfın bir örneğini, hizmetle iletişim kurmak için System.ServiceModel.DuplexClientBase<TChannel> veya System.ServiceModel.DuplexChannelFactory<TChannel>'e geçirmesini gerektirir. Çift yönlü istemciler hakkında daha fazla bilgi için bkz. Çift Yönlü Bir Sözleşme ile Hizmetlere Nasıl Erişilir.
Aşağıdaki sözleşmede, SampleDuplexHelloCallback türünde bir geri çağırma sözleşmesi belirtilmiştir.
[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
Bu geri çağırma sözleşmesini aramak, istemci uygulamasının uygulaması gereken aşağıdaki arabirimi bulur.
[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
Hizmet Sözleşmesi Kanal Arabirimlerini Bulma
Bir hizmet sözleşmesi arabirimiyle ChannelFactory sınıfını kullanırken, kanalı açıkça açmak, kapatmak veya durdurmak için System.ServiceModel.IClientChannel arabirimine dönüştürme yapmanız gerekir. Birlikte çalışmayı kolaylaştırmak için, Svcutil.exe aracı, hem hizmet sözleşmesi arabirimini hem de IClientChannel arabirimini uygulayan ve herhangi bir tür dönüştürme işlemine gerek kalmadan istemci kanal altyapısı ile etkileşim kurmanıza olanak tanıyan bir yardımcı arabirim oluşturur. Aşağıdaki kod, önceki hizmet sözleşmesini uygulayan yardımcı istemci kanalının tanımını gösterir.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ISampleServiceChannel : ISampleService, System.ServiceModel.IClientChannel
{
}