Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере instancing демонстрируется параметр поведения инстантирования, который определяет, как экземпляры класса службы создаются в ответ на клиентские запросы. Пример основан на руководстве по началу работы, которое реализует ICalculator контракт службы. В этом примере определяется новый контракт, ICalculatorInstance, который наследуется от ICalculator. Контракт, указанный в ICalculatorInstance, предусматривает три дополнительных операции для проверки состояния экземпляра службы. Изменив параметр инстанцирования, вы можете наблюдать за изменением поведения, запустив клиент.
В этом примере клиентом является консольное приложение (.exe), а служба хостится с помощью Internet Information Services (IIS).
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Доступны следующие режимы инстантирования:
PerCall: для каждого запроса клиента создается новый экземпляр службы.
PerSession: новый экземпляр создается для каждого нового клиентского сеанса и сохраняется в течение всего времени существования этого сеанса (требуется привязка, поддерживающая сеанс).
Single: один экземпляр класса службы обрабатывает все клиентские запросы на время существования приложения.
Класс службы указывает поведение с атрибутом, [ServiceBehavior(InstanceContextMode=<setting>)] как показано в следующем примере кода. Изменяя, какие строки закомментированы, можно наблюдать за поведением каждого из режимов экземпляра. Не забудьте перестроить службу после изменения режима инстантирования. Не требуется указывать настройки, связанные с инстанцированием, на клиенте.
// 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();
}
При запуске примера запросы и ответы операции отображаются в окне консоли клиента. Отображается режим работы экземпляра, в котором выполняется служба. После каждой операции идентификатор экземпляра и количество операций отображаются для отражения поведения режима инстантирования. Нажмите клавишу ВВОД в окне клиента, чтобы завершить работу клиента.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.