2

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

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

更多信息:问题是“待定”安全会话。这些是从未使用过的会话,只是打开的。这很烦人,因为在您的服务开始发出 500 个请求之前,您最多可以有 128 个这样的待处理会话。

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

尽管如此,识别那些“行为不端”的客户的方法还是有用的。

问候,亚历克斯

4

2 回答 2

1

由于客户端和服务器只共享它们之间的消息,因此您实际上无能为力。

在服务器端,您可以查看从客户端发送的一些信息 - 查看OperationContext.Current服务方法中的属性 - 请参阅OperationContext 上的 MSDN 文档,了解提供的详细信息。

因此,您可能能够记录某些信息来识别“违规”客户端。

马克

于 2009-10-17T08:38:00.233 回答
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

于 2009-10-17T15:20:21.967 回答