Share via


Örnek Oluşturma

Instancing örneği , istemci isteklerine yanıt olarak bir hizmet sınıfının örneklerinin nasıl oluşturulduğunu denetleyen bir tutarlama davranışı ayarını gösterir. Örnek, hizmet sözleşmesini uygulayan Başlarken'iICalculator temel alır. Bu örnek, ICalculatorInstanceöğesinden ICalculatordevralınan yeni bir sözleşme tanımlar. tarafından ICalculatorInstance belirtilen sözleşme, hizmet örneğinin durumunu incelemek için üç ek işlem sağlar. Instancing ayarını değiştirerek istemciyi çalıştırarak davranış değişikliğini gözlemleyebilirsiniz.

Bu örnekte istemci bir konsol uygulamasıdır (.exe) ve hizmet Internet Information Services (IIS) tarafından barındırılır.

Not

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

Aşağıdaki boyutlandırma modları kullanılabilir:

  • PerCall: Her istemci isteği için yeni bir hizmet örneği oluşturulur.

  • PerSession: Her yeni istemci oturumu için yeni bir örnek oluşturulur ve bu oturumun ömrü boyunca korunur (oturumu destekleyen bir bağlama gerektirir).

  • Single: Hizmet sınıfının tek bir örneği, uygulamanın ömrü boyunca tüm istemci isteklerini işler.

Hizmet sınıfı, aşağıdaki kod örneğinde gösterildiği gibi özniteliğiyle [ServiceBehavior(InstanceContextMode=<setting>)] birlikte gelen davranışı belirtir. Açıklama satırı yapılan satırları değiştirerek örnek modlarının her birinin davranışını gözlemleyebilirsiniz. Instancing modunu değiştirdikten sonra hizmeti yeniden oluşturmayı unutmayın. İstemcide belirtilmesi gereken bir instancing ile ilgili ayar yok.

// Enable one of the following instance modes to compare instancing behaviors.
 [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]

// PerCall creates a new instance for each operation.
//[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

// Singleton creates a single instance for application lifetime.
//[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculatorInstance
{
    static Object syncObject = new object();
    static int instanceCount;
    int instanceId;
    int operationCount;

    public CalculatorService()
    {
        lock (syncObject)
        {
            instanceCount++;
            instanceId = instanceCount;
        }
    }

    public double Add(double n1, double n2)
    {
        operationCount++;
        return n1 + n2;
    }

    public double Subtract(double n1, double n2)
    {
        Interlocked.Increment(ref operationCount);
        return n1 - n2;
    }

    public double Multiply(double n1, double n2)
    {
        Interlocked.Increment(ref operationCount);
        return n1 * n2;
    }

    public double Divide(double n1, double n2)
    {
        Interlocked.Increment(ref operationCount);
        return n1 / n2;
    }

    public string GetInstanceContextMode()
    {   // Return the InstanceContextMode of the service
        ServiceHost host = (ServiceHost)OperationContext.Current.Host;
        ServiceBehaviorAttribute behavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
        return behavior.InstanceContextMode.ToString();
    }

    public int GetInstanceId()
    {   // Return the id for this instance
        return instanceId;
    }

    public int GetOperationCount()
    {   // Return the number of ICalculator operations performed
        // on this instance
        lock (syncObject)
        {
            return operationCount;
        }
    }
}

static void Main()
{
    // Create a client.
    CalculatorInstanceClient client = new CalculatorInstanceClient();
    string instanceMode = client.GetInstanceContextMode();
    Console.WriteLine("InstanceContextMode: {0}", instanceMode);
    DoCalculations(client);

    // Create a second client.
    CalculatorInstanceClient client2 = new CalculatorInstanceClient();

    DoCalculations(client2);

    Console.WriteLine();
    Console.WriteLine("Press <ENTER> to terminate client.");
    Console.ReadLine();
}

Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. Hizmetin altında çalıştığı örnek modu görüntülenir. Her işlemden sonra örnek kimliği ve işlem sayısı, bağlama modunun davranışını yansıtacak şekilde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

Ö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 makineler arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.