我有一个相当简单的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个连接的限制,超时为两分钟,我当然可以看到我的测试方法将中断某些连接.这是否是一种公认的不良测试方法的预期结果?或者可以在配置中做些什么来改善这个?
| 归档时间: |
|
| 查看次数: |
2903 次 |
| 最近记录: |