服务器500:待处理的安全对话太多

Tha*_*Guy 7 .net c# wcf

我有一个相当简单的WCF Web服务,使用.Net 3.5在IIS Express中托管(最终是完整的IIS).服务方法相当无趣.

[ServiceContract]
public class MySvc
{
    [OperationContract]
    public Stuff MyMethod(string input)
    {
        Stuff result = DoSomething();
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

服务配置也相当通用:

<system.serviceModel>
    <services>
        <service behaviorConfiguration="MySvcBehavior" name="MySvc">
            <endpoint address="" binding="wsHttpBinding" contract="MySvc">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MySvcBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

该服务由ASPX应用程序中的代码隐藏消耗.有一个服务参考,导致一些同样无趣的代码.

MySvcClient svc = new MySvcClient();
Stuff result = svc.MyMethod("foo");
Run Code Online (Sandbox Code Playgroud)

只要一次只有一个请求,一切正常,客户端代码就会得到预期的结果.好极了.

当我做一些非常原始的压力测试时,问题出现了.我在浏览器中加载客户端ASPX页面,然后按住F5键.观看IIS Express窗口,首先结果返回状态200,但几分钟后我开始看到状态500.此时,服务将仅响应状态500,直到我重新启动IIS Express.(基于等待大约10分钟.)

在客户端代码中设置断点,我看到完整的返回消息是"服务器上有太多待处理的安全对话.请稍后再试".

在服务器代码中设置断点,我发现我的代码甚至没有被调用.所以它在调用和我的代码的实际启动之间失败了.

我的在线搜索并不是很有希望,主要是为了覆盖maxPendingSessions属性而导致编写自定义绑定的相同建议,以及以"Someone告诉我有[未命名]配置文件设置"开头的线程然后导致一个破碎的链接声称微软承认这是一个错误.

关于maxPendingSessions属性的链接确实提到了128个连接的限制,超时为两分钟,我当然可以看到我的测试方法将中断某些连接.这是否是一种公认​​的不良测试方法的预期结果?或者可以在配置中做些什么来改善这个?

Tra*_*mes 4

听起来您在服务器上有无数个打开的连接 - 由于客户端未使用“using”进行连接。