识别未正确部署的WCF客户端

时间:2009-10-16 23:18:16

标签: wcf session ws-security

我们在IIS中托管了一个WCF服务。现在有大量不同的客户端应用程序调用此服务。使用WS-SecureConversion。

现在,服务诊断日志显示安全会话正在中止的警告。这很可能是因为没有正确关闭会话的客户端。

更多信息:问题是“待定”安全会话。那些是从未使用过的会话,只是打开了。这非常令人讨厌,因为在您的服务开始计算500秒之前,您最多可以有128个这样的待处理会话。

这很容易复制(见下面的答案)。我能够使用WinDbg查询128个SessionInitiationMessageHandlers。因此,这可能是识别这种情况的一个好方法。

但是,识别那些“行为不端”客户的方法仍然有用。

此致 亚历

2 个答案:

答案 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