Sdílet prostřednictvím


Vytváření instancí

Ukázka Instanceng ukazuje nastavení chování při vytváření instancí, které řídí, jak se instance třídy služby vytvářejí v reakci na požadavky klientů. Ukázka je založená na Začínáme, které implementuje smlouvu o službách ICalculator. Tato ukázka definuje nový kontrakt, ICalculatorInstancekterý dědí z ICalculator. Smlouva určená ICalculatorInstance definuje tři další operace pro kontrolu stavu instance služby. Změnou nastavení vytváření instancí můžete sledovat změnu chování spuštěním klienta.

V této ukázce je klient konzolovou aplikací (.exe) a služba je hostovaná internetovou informační službou (IIS).

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

K dispozici jsou následující instanční módy.

  • PerCall: Pro každou žádost klienta se vytvoří nová instance služby.

  • PerSession: Pro každou novou relaci klienta se vytvoří nová instance a po celou dobu životnosti této relace se udržuje (vyžaduje vazbu, která podporuje relaci).

  • Single: Jedna instance třídy služby zpracovává všechny požadavky klientů po celou dobu životnosti aplikace.

Třída služby určuje chování vytváření instancí pomocí atributu [ServiceBehavior(InstanceContextMode=<setting>)] , jak je znázorněno v ukázce kódu, která následuje. Změnou toho, které řádky se zakomentují, můžete sledovat chování jednotlivých režimů instance. Po změně režimu instancování nezapomeňte službu znovu sestavit. Pro klienta neexistují žádná nastavení související s instancemi.

// 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();
}

Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Zobrazí se režim instance, pod který služba běží. Po každé operaci se zobrazí ID instance a počet operací tak, aby odrážely chování režimu vytváření instancí. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.

Jak nastavit, sestavit a spustit ukázku

  1. Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.

  2. Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

  3. Pokud chcete spustit ukázku v konfiguraci pro jeden počítač nebo pro více počítačů, postupujte podle pokynů v Spuštění ukázek Windows Communication Foundation.