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 ICalculator kontrakt služby. Tato ukázka definuje nový kontrakt, ICalculatorInstancekterý dědí z ICalculator. Smlouva určená ICalculatorInstance třemi dalšími operacemi 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á Internetová informační služba (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í režimy vytváření instancí:

  • 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 vytváření instancí nezapomeňte službu znovu sestavit. Pro klienta neexistují žádná nastavení související s vytvářením instancí.

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

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

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

  3. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.