Per-Call اصلیترین نوع instance management سهگانه در WCF است. در این روش با هر request کلاینت، یعنی با فراخوانی هر یک از متودهای سرویس، یک instance از object سرویس ایجاد شده و پس از اتمام درخواست آن instance از بین میرود. روش Per-Call نسبت به بقیه دارای مزایایی است از جمله مشغول نگه نداشتن منابع سرور و Scalable بودن application. به این معنی که میتوان سرویس WCF را روی چند سرور host کرده و یک Load Balancer درخواستها را بین آنها تقسیم کند تا Performance بهتری به دست بیاید.
برای حفظ state در روش Per-Call میتوان از کلاینت فراخوانی کننده یک چیزی شبیه به ID دریافت کرده و state کلاینت مورد بحث در جایی در سرور ذخیره کرد. تنظیم یک سرویس برای Per-Call بودن به این شکل است:
[ServiceContract]
interface IMyContract
{
[OperationContract]
void MyMethod();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class MyService : IMyContract,IDisposable
{
int m_Counter = 0;
MyService()
{
Trace.WriteLine(“MyService.MyService()”);
}
public void MyMethod()
{
m_Counter++;
Trace.WriteLine(“Counter = ” + m_Counter);
}
public void Dispose()
{
Trace.WriteLine(“MyService.Dispose()”);
}
}
interface IMyContract
{
[OperationContract]
void MyMethod();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class MyService : IMyContract,IDisposable
{
int m_Counter = 0;
MyService()
{
Trace.WriteLine(“MyService.MyService()”);
}
public void MyMethod()
{
m_Counter++;
Trace.WriteLine(“Counter = ” + m_Counter);
}
public void Dispose()
{
Trace.WriteLine(“MyService.Dispose()”);
}
}