WCF İstemcisi Kullanarak Hizmetlere Erişme
Bir hizmet oluşturduktan sonra, sonraki adım bir WCF istemci proxy'si oluşturmaktır. İstemci uygulaması, hizmetle iletişim kurmak için WCF istemci proxy'sini kullanır. İstemci uygulamaları genellikle hizmeti çağırmak için kullanılabilecek WCF istemci kodu oluşturmak için hizmetin meta verilerini içeri aktarır.
WCF istemcisi oluşturmaya yönelik temel adımlar şunlardır:
Hizmet kodunu derleyin.
WCF istemci proxy'sini oluşturun.
WCF istemci proxy'sinin örneğini oluşturun.
WCF istemci proxy'si, daha fazla bilgi için bkz . ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) Hizmet Modeli Meta Veri Yardımcı Programı Aracı (SvcUtil.exe) kullanılarak el ile oluşturulabilir. WCF istemci proxy'si, Hizmet Başvurusu Ekle özelliği kullanılarak Visual Studio'da da oluşturulabilir. WCF istemci proxy'sini iki yöntemden birini kullanarak oluşturmak için hizmetin çalışıyor olması gerekir. Hizmet kendi kendine barındırılıyorsa konağı çalıştırmanız gerekir. Hizmet IIS/WAS içinde barındırılıyorsa başka bir şey yapmanız gerekmez.
ServiceModel Meta Veri Yardımcı Programı Aracı
ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe), meta verilerden kod oluşturmaya yönelik bir komut satırı aracıdır. Aşağıdaki kullanım, temel bir Svcutil.exe komutu örneğidir.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Alternatif olarak, dosya sistemindeki Web Hizmetleri Açıklama Dili (WSDL) ve XML Şema tanım dili (XSD) dosyalarıyla Svcutil.exe kullanabilirsiniz.
Svcutil.exe <list of WSDL and XSD files on file system>
Sonuç, istemci uygulamasının hizmeti çağırmak için kullanabileceği WCF istemci kodunu içeren bir kod dosyasıdır.
Yapılandırma dosyaları oluşturmak için aracı da kullanabilirsiniz.
Svcutil.exe <file1 [,file2]>
Yalnızca bir dosya adı verilirse, bu çıktı dosyasının adıdır. İki dosya adı verilirse, ilk dosya içeriği oluşturulan yapılandırmayla birleştirilen ve ikinci dosyaya yazılan bir giriş yapılandırma dosyasıdır. Yapılandırma hakkında daha fazla bilgi için bkz . Hizmetler için Bağlamaları Yapılandırma.
Önemli
Güvenli olmayan meta veri istekleri, güvenli olmayan tüm ağ isteklerinin yaptığı gibi belirli riskler oluşturur: İletişimde olduğunuz uç noktanın söylediği kişi olduğundan emin değilseniz, aldığınız bilgiler kötü amaçlı bir hizmetten meta veriler olabilir.
Visual Studio'da Hizmet Başvurusu Ekleme
Hizmet çalışırken, WCF istemci proxy'sini içeren projeye sağ tıklayın ve Hizmet Başvurusu Ekle'yi>seçin. Hizmet Başvurusu Ekle İletişim Kutusunda, aramak istediğiniz hizmetin URL'sini yazın ve Git düğmesine tıklayın. İletişim kutusunda, belirttiğiniz adreste kullanılabilen hizmetlerin listesi görüntülenir. Kullanılabilir sözleşmeleri ve işlemleri görmek için hizmete çift tıklayın, oluşturulan kod için bir ad alanı belirtin ve Tamam düğmesine tıklayın.
Örnek
Aşağıdaki kod örneği, bir hizmet için oluşturulmuş bir hizmet sözleşmesini gösterir.
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
// Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
' Other methods are not shown here.
End Interface
Visual Studio'da ServiceModel Metadata yardımcı programı aracı ve Hizmet Başvurusu Ekle aşağıdaki WCF istemci sınıfını oluşturur. sınıfı, genel ClientBase<TChannel> sınıftan devralır ve arabirimini ICalculator
uygular. Araç ayrıca arabirimi de oluşturur ICalculator
(burada gösterilmez).
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(string endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{}
public double Add(double n1, double n2)
{
return base.Channel.Add(n1, n2);
}
}
Partial Public Class CalculatorClient
Inherits System.ServiceModel.ClientBase(Of ICalculator)
Implements ICalculator
Public Sub New()
MyBase.New
End Sub
Public Sub New(ByVal endpointConfigurationName As String)
MyBase.New(endpointConfigurationName)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal endpointConfigurationName As String,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(binding, remoteAddress)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
Implements ICalculator.Add
Return MyBase.Channel.Add(n1, n2)
End Function
End Class
WCF İstemcisini Kullanma
WCF istemcisini kullanmak için, WCF istemcisinin bir örneğini oluşturun ve aşağıdaki kodda gösterildiği gibi yöntemlerini çağırın.
// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint");
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")
' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
İstemci Tarafından Oluşan Hata Ayıklama Özel Durumları
WCF istemcisi tarafından oluşan birçok özel duruma hizmetteki bir özel durum neden olur. Bunun bazı örnekleri şunlardır:
SocketException: Var olan bir bağlantı uzak konak tarafından zorla kapatıldı.
CommunicationException: Temel alınan bağlantı beklenmedik bir şekilde kapatıldı.
CommunicationObjectAbortedException: Yuva bağlantısı durduruldu. Bunun nedeni iletinizi işlerken oluşan bir hata, uzak konak tarafından bir alma zaman aşımının aşılması veya temel alınan bir ağ kaynağı sorunu olabilir.
Bu tür özel durumlar oluştuğunda, sorunu çözmenin en iyi yolu hizmet tarafında izlemeyi açmak ve orada hangi özel durumun oluştuğuna karar vermektir. İzleme hakkında daha fazla bilgi için bkz. İzleme ve Uygulamanızda Sorun Gidermek için İzlemeyi Kullanma.
Ayrıca bkz.
- Nasıl yapılır: İstemci Oluşturma
- Nasıl yapılır: Çift Yönlü Sözleşme ile Hizmetlere Erişme
- Nasıl yapılır: Hizmet İşlemlerini Zaman Uyumsuz Olarak Çağırma
- Nasıl yapılır: Tek Yönlü ve İstek-Yanıt Sözleşmeleriyle Hizmetlere Erişme
- Nasıl yapılır: WSE 3.0 Hizmetine Erişme
- Oluşturulmuş İstemci Kodlarını Anlama
- Nasıl yapılır: XmlSerializer Kullanarak WCF İstemci Uygulamalarının Başlangıç Zamanlarını İyileştirme
- İstemci Çalışma Zamanı Davranışını Belirtme
- İstemci Davranışlarını Yapılandırma