我们在IIS中托管了一个WCF服务。现在有大量不同的客户端应用程序调用此服务。使用WS-SecureConversion。
现在,服务诊断日志显示安全会话正在中止的警告。这很可能是因为没有正确关闭会话的客户端。
更多信息:问题是“待定”安全会话。那些是从未使用过的会话,只是打开了。这非常令人讨厌,因为在您的服务开始计算500秒之前,您最多可以有128个这样的待处理会话。
这很容易复制(见下面的答案)。我能够使用WinDbg查询128个SessionInitiationMessageHandlers。因此,这可能是识别这种情况的一个好方法。
但是,识别那些“行为不端”客户的方法仍然有用。
此致 亚历
答案 0 :(得分:1)
由于客户端和服务器只在它们之间共享消息,因此您无法做到这一点。
在服务器端,您可以查看从客户端发送的一些信息 - 查看服务方法中的OperationContext.Current
属性 - 请参阅MSDN documentation on OperationContext有关详细信息的详细信息。
因此,您可以记录某些信息以识别“违规”客户。
马克
答案 1 :(得分:0)
甜蜜......使用安全转换杀死WCF服务的最佳方法似乎是什么都不做。
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
var client = new MyClient();
client.ClientCredentials.UserName.UserName = "user";
client.ClientCredentials.UserName.Password = "password";
while(true)
{
Console.WriteLine("OPEN");
var c = client.ChannelFactory.CreateChannel();
((ICommunicationObject)c).Open();
// If I comment the following line, the service throws a
// "Too busy, too many pending sessions" 500.
var request = new MyRequest { };
c.Do(request);
// Of course I did *not* comment this line
((ICommunicationObject)c).Close();
}
与此同时,这个错误已被MS确认,但仍然保留在.NET 4.x中,即使MS另有说法:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=499859