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:

  1. Hizmet kodunu derleyin.

  2. WCF istemci proxy'sini oluşturun.

  3. 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.