[英]How do I securely authenticate the calling assembly of a WCF service method?
[英]how do i know how many clients are calling my WCF service function
我正在编写一个程序来在高并发情况下测试WCF服务性能。
在客户端,我启动了许多线程来调用WCF服务函数,该函数返回一长串数据对象。
在服务器端,在我的客户端调用的函数中,我需要知道调用该函数的客户端数量。
为此,我设置了一个计数器变量。 在函数的开头,我将计数器加1,但是在函数返回结果后如何减少它呢?
int clientCount=0;
public DataObject[] GetData()
{
Interlocked.Increment(ref clientCount);
List<DataObject> result = MockDb.GetData();
return result.ToArray();
Interlocked.Decrement(ref clientCount); //can't run to here...
}
我已经在C ++中看到了一种方法。
创建一个名为counter的新类。
在计数器类的构造函数中,增加变量。 并在析构函数中减少它。
在函数中,创建一个计数器对象,以便调用其构造函数。 在函数返回后,将调用其析构函数。
像这样:
class counter
{
public:
counter(){++clientCount; /* not simply like this, need to be atomic*/}
~counter(){--clientCount; /* not simply like this, need to be atomic*/}
};
...
myfunction()
{
counter c;
//do something
return something;
}
在c#中,我认为我可以使用以下代码来执行此操作,但不能确定。
public class Service1 : IService1
{
static int clientCount = 0;
private class ClientCounter : IDisposable
{
public ClientCounter()
{
Interlocked.Increment(ref clientCount);
}
public void Dispose()
{
Interlocked.Decrement(ref clientCount);
}
}
public DataObject[] GetData()
{
using (ClientCounter counter = new ClientCounter())
{
List<DataObject> result = MockDb.GetData();
return result.ToArray();
}
}
}
我写一个计数器类实现IDisposable接口。 并将我的功能代码放入using块中 。 但似乎效果不佳。 无论我启动多少个线程,clientCount变量都远远小于线程数。
任何建议将不胜感激。
看一下WCF使用的各个层。 您可以插入其中之一。
例如,将一个IDispatchMessageInspector添加到您的EndpointBehavior:
public class ConsoleOutputMessageInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
Console.WriteLine("Starting call");
// count++ here
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
// count-- here
Console.WriteLine("Returning");
}
}
在此处查看更多信息: http : //weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf-message-inspector.aspx
看看如何在此处扩展WCF: http : //msdn.microsoft.com/zh-cn/magazine/cc163302.aspx#S6
您是否尝试过WCF的内置性能计数器:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.