我正在实施一个大量使用WCF服务的Silverlight应用程序,我现在已经到了这一点,偶尔会有几个长服务调用阻止其他服务调用运行。
这些服务电话最终会超时。我想知道它是否可能一个接一个地执行服务调用的队列系统,这样长时间的调用会阻止其他调用,但不会导致它们超时。
我正在使用服务代理来打包服务电话
public interface IExampleServiceAgent
{
void ProcessData(int a, string b, EventHandler<ProcessDataCompletedEventArgs> callback);
}
Public ExampleServiceAgent1 : IExampleServiceAgent
{
ExampleClient _Client = new ExampleClient();
public void ProcessData(int anInt, string aString, EventHandler<ProcessDataCompletedEventArgs> callback)
{
EventHandler<ProcessDataCompletedEventArgs> wrapper = null;
wrapper = (a,b) =>
{
callback(a,b);
_Client.ProcessDataCompleted -= wrapper;
}
_Client.ProcessDataCompleted += wrapper;
_Client.ProcessDataAsync(anInt,aString);
}
}
然后将从代码中调用上述服务代理,如下所示:
ServiceAgent.ProcessData(1,"STRING", (a,b) =>
{
if (b.Error != null)
{
//Handle Error
}
else
{
//DO something with the data
}
}
有没有办法可以将这些服务调用放入队列并逐个执行?
我尝试将它们包装为Actions并将它们添加到队列中,但这并不等待一个人在启动下一个之前完成执行,尽管他们确实正确地调用了服务,但没有数据返回到调用视图模型。
答案 0 :(得分:3)
WCF服务可以处理大量的呼叫,但为了避免拒绝服务攻击,默认情况下可以处理的请求数量有限。
Silverlight WCF服务的重大限制是
关于Quick Ways to Boost Performance and Scalability of ASP.NET, WCF and Desktop Clients的CodeProject文章很有用。
我猜你正在立刻遇到第一个问题。在您的WCF配置中,您需要添加以下内容以增加单个IP连接:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
然后,您可以达到解决方案调整web / app.config文件中服务行为的第二个限制。
以下是我自己解决这些问题时发现的一些参考资料: