Aracılığıyla paylaş


Başlarken Örneği

GettingStarted örneği, Windows Communication Foundation (WCF) kullanarak tipik bir hizmeti ve tipik bir istemciyi nasıl uygulayacaklarını gösterir. Bu örnek, diğer tüm temel teknoloji örneklerinin temelini oluşturur.

Not

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Hizmet, meta veri olarak genel kullanıma sunan bir hizmet sözleşmesinde gerçekleştirdiği işlemleri açıklar. Hizmet ayrıca işlemleri uygulamak için gereken kodu içerir.

İstemci, hizmet sözleşmesinin tanımını ve hizmete erişmek için bir ara sunucu sınıfını içerir. Proxy kodu, ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) kullanılarak hizmet meta verilerinden oluşturulur.

Windows Vista'da hizmet, Windows Etkinleştirme Hizmeti'nde (WAS) barındırılır. Windows XP ve Windows Server 2003'te, Internet Information Services (IIS) ve ASP.NET tarafından barındırılır. IIS veya WAS'de bir hizmetin barındırılması, hizmetin ilk kez erişildiğinde otomatik olarak etkinleştirilmesini sağlar.

Not

Iis yerine bir konsol uygulamasında hizmeti barındıran bir örneği kullanmaya başlamak isterseniz, Bkz . Kendi Kendine Konak örneği.

Hizmet ve istemci, dağıtım sırasında esneklik sağlayan yapılandırma dosyası ayarlarında erişim ayrıntılarını belirtir. Bu, adres, bağlama ve sözleşme belirten bir uç nokta tanımı içerir. Bağlama, hizmete nasıl erişileceğine ilişkin aktarım ve güvenlik ayrıntılarını belirtir.

Hizmet, meta verilerini yayımlamak için bir çalışma zamanı davranışı yapılandırıyor.

Hizmet, istek-yanıt iletişim desenini tanımlayan bir sözleşme uygular. Sözleşme, matematik işlemlerini (ekleme, çıkarma, çarpma ve bölme) kullanıma sunan arabirim tarafından ICalculator tanımlanır. İstemci belirli bir matematik işlemine istekte bulunur ve hizmet sonuçla yanıtlar. Hizmet, aşağıdaki kodda tanımlanan bir ICalculator sözleşme uygular.

' Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
     Public Interface ICalculator
        <OperationContract()>
        Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

Hizmet uygulaması, aşağıdaki örnek kodda gösterildiği gibi uygun sonucu hesaplar ve döndürür.

' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

Hizmet, aşağıdaki örnek yapılandırmada gösterildiği gibi bir yapılandırma dosyası (Web.config) kullanılarak tanımlanan hizmetle iletişim kurmak için bir uç nokta sunar.

<services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
        <!-- ICalculator is exposed at the base address provided by
         host: http://localhost/servicemodelsamples/service.svc.  -->
       <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
       ...
    </service>
</services>

Hizmet, uç noktayı IIS veya WAS konağı tarafından sağlanan temel adreste kullanıma sunar. Bağlama, adresleme ve güvenlik için HTTP iletişimi ve standart Web hizmeti protokolleri sağlayan standart WSHttpBindingile yapılandırılır. Sözleşme, hizmet tarafından uygulanan sözleşmedir ICalculator .

Yapılandırıldığı gibi, hizmete aynı bilgisayardaki bir istemci tarafından adresinden erişilebilir http://localhost/servicemodelsamples/service.svc . Uzak bilgisayarlardaki istemcilerin hizmete erişebilmesi için localhost yerine tam etki alanı adı belirtilmelidir.

Çerçeve varsayılan olarak meta verileri kullanıma sunmaz. Bu nedenle, hizmet üzerinde bir meta veri değişimi (MEX) uç noktasını http://localhost/servicemodelsamples/service.svc/mexaçar ServiceMetadataBehavior ve kullanıma sunar. Aşağıdaki yapılandırmada bu gösterilmektedir.

<system.serviceModel>
  <services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      ...
      <!-- the mex endpoint is exposed at
       http://localhost/servicemodelsamples/service.svc/mex -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults
   attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

İstemci, ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) tarafından oluşturulan bir istemci sınıfını kullanarak belirli bir sözleşme türünü kullanarak iletişim kurar. Bu oluşturulan istemci generatedClient.cs veya generatedClient.vb dosyasında yer alır. Bu yardımcı program, belirli bir hizmetin meta verilerini alır ve belirli bir sözleşme türünü kullanarak iletişim kurmak üzere istemci uygulaması tarafından kullanılmak üzere bir istemci oluşturur. Barındırılan hizmet, güncelleştirilmiş meta verileri almak için kullanıldığından istemci kodunu oluşturmak için kullanılabilir olmalıdır.

Yazılan ara sunucuyu oluşturmak için istemci dizinindeki SDK komut isteminden aşağıdaki komutu çalıştırın:

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Visual Basic'te istemci oluşturmak için SDK komut isteminden aşağıdakileri yazın:

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

Oluşturulan istemciyi kullanarak, istemci uygun adresi ve bağlamayı yapılandırarak belirli bir hizmet uç noktasına erişebilir. Hizmet gibi istemci de iletişim kurmak istediği uç noktayı belirtmek için bir yapılandırma dosyası (App.config) kullanır. İstemci uç noktası yapılandırması, aşağıdaki örnekte gösterildiği gibi hizmet uç noktası, bağlama ve sözleşme için mutlak bir adres içerir.

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

İstemci uygulaması istemciyi başlatır ve aşağıdaki örnek kodda gösterildiği gibi hizmetle iletişim kurmaya başlamak için yazılan arabirimi kullanır.

' Create a client
Dim client As New CalculatorClient()

' Call the Add service operation.
            Dim value1 = 100.0R
            Dim value2 = 15.99R
            Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)

' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)

' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)

'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client releases all communication resources.
client.Close();

Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Başlarken örneği, hizmet ve istemci oluşturmanın standart yolunu gösterir. Belirli ürün özelliklerini göstermek için bu örnekteki diğer Temel derleme.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek veya bilgisayarlar arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.

Ayrıca bkz.