繁体   English   中英

快速调用WCF服务时出错

[英]Error when rapidly calling WCF service

我有一个WCF服务,从我的Silverlight 3应用程序(使用C#)调用。 为用户填充的列表框中的每个项目调用该服务。 当列表框中只包含一个项目时,一切正常。 多个项目有时会导致错误。 我测试了一下,有时我得到2项错误,有时不会。 有4个项目测试,有一次我得到2个结果返回,之后是错误。

最糟糕的是,错误只是说“Remoteserver返回了一个Error:NotFound”。 Error是一个“CommunicationException”,并在EndMethod(System.IAsyncResult结果)方法中抛出

这是电话:

foreach (ListBoxItem lbItem in categorySeeds)
{
    Helper.Instance.service.ClusterAsync(Helper.Instance.language.value,
     ((KeyValuePair<string, int>)lbItem.Tag).Value,
     Helper.Instance.clusterLevel,
     Helper.Instance.clusterDelay,
     Helper.Instance.clusterTolerance,
     Helper.Instance.clusterMaxCategories,
     Helper.Instance.similarity);
}

我记得我曾经通过调用包含我的WCF的AppPool的“重用”来“解决”这个问题......所以可能配置有问题? 有没有人知道我是否可以使WCF返回比“NotFound”更有意义的错误消息?

先谢谢你,弗兰克

解答:问题是由多个WCF-Service-Call的并发访问引起的。 该服务调用与同义词对象一起使用的StoredProcedures,每个SP更改为参数给出的值...所以我必须在那里修复它。

WCF服务器将具有最大并发会话数和并发会话数,分别为10和16。 如果您使用超过该呼叫数量过快地呼叫该服务,则可能会导致超时和/或消息被拒绝。

这是一种服务行为( serviceThrottling ),它确实可以在服务器上配置:

<serviceBehaviors>
   <behavior name="YourServiceBehavior">
       <serviceDebug includeExceptionDetailInFaults="True" />
       <serviceThrottling 
          maxConcurrentCalls="25"
          maxConcurrentInstances="25"
          maxConcurrentSessions="25"/>
   </behavior>
</serviceBehaviors>

您从WCF返回的一般错误消息完全是故意的--WCF设计人员不希望向外部调用者透露任何可能帮助他利用您的系统的内容。 这也可以通过服务行为进行调整,然后服务行为会向您返回更有意义的错误消息:

<serviceBehaviors>
   <behavior name="YourServiceBehavior">
       <serviceDebug includeExceptionDetailInFaults="True" />
   </behavior>
</serviceBehaviors>

调用后需要处理该服务。 我有同样的问题,我使用声明修复它 -

using (TempConvertService TMPConSvc =
new TempConvertService.TempConvertServiceClient())
{
result = TMPConSvc.ConvertToF(32.00);
return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM