Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel Instancing menunjukkan pengaturan perilaku instancing, yang mengontrol bagaimana instans kelas layanan dibuat sebagai respons terhadap permintaan klien. Sampel ini didasarkan pada panduan Memulai, yang mengimplementasikan ICalculator kontrak layanan. Sampel ini mendefinisikan kontrak baru, ICalculatorInstance, yang mewarisi dari ICalculator. Kontrak yang ditentukan dengan ICalculatorInstance menyediakan tiga operasi tambahan untuk memeriksa status instans layanan. Dengan mengubah pengaturan instancing, Anda dapat mengamati perubahan perilaku dengan menjalankan klien.
Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan dihosting oleh Internet Information Services (IIS).
Nota
Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.
Mode instancing berikut tersedia:
PerCall: Instans layanan baru dibuat untuk setiap permintaan klien.
PerSession: Instans baru dibuat untuk setiap sesi klien baru, dan dipertahankan selama masa pakai sesi tersebut (memerlukan pengikatan yang mendukung sesi).
Single: Satu instans kelas layanan menangani semua permintaan klien selama masa pakai aplikasi.
Kelas layanan menentukan perilaku instancing dengan [ServiceBehavior(InstanceContextMode=<setting>)] atribut seperti yang ditunjukkan dalam sampel kode berikut. Dengan mengubah baris mana yang dikomentari, Anda dapat mengamati perilaku setiap mode instans. Ingatlah untuk membangun kembali layanan setelah mengubah mode instancing. Tidak ada pengaturan terkait instancing yang perlu disetel pada klien.
// 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();
}
Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Mode instans yang dijalankan oleh layanan tersebut ditampilkan. Setelah setiap operasi, ID instans dan jumlah operasi ditampilkan untuk mencerminkan perilaku mode instancing. Tekan ENTER di jendela klien untuk mematikan klien.
Untuk menyiapkan, mengompilasi, dan menjalankan sampel
Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.
Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.
Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.