扩展进行Http调用的WCF服务

扩展进行Http调用的WCF服务,wcf,asynchronous,scalability,sync,Wcf,Asynchronous,Scalability,Sync,我有一个托管在IIS中的WCF服务,它是各种第三方API的适配器。这项服务所做的一切是: -接受来自GUI的同步操作调用 -向第三方触发同步Http请求 -将结果转换为规范格式 -返回GUI 实际上,它将大部分时间花在等待网络i/o完成上。 在为GUI维护同步界面的同时,实现此类服务扩展的最佳模式是什么?我知道,对于具有大量I/o的ASP.NET应用程序,建议使用异步处理程序释放执行请求的线程 WCF有什么好的模式吗 谢谢, 正如您所描述的,这是一个潜在的可伸缩性问题 ASP.NET有一个线程池

我有一个托管在IIS中的WCF服务,它是各种第三方API的适配器。这项服务所做的一切是: -接受来自GUI的同步操作调用 -向第三方触发同步Http请求 -将结果转换为规范格式 -返回GUI

实际上,它将大部分时间花在等待网络i/o完成上。 在为GUI维护同步界面的同时,实现此类服务扩展的最佳模式是什么?我知道,对于具有大量I/o的ASP.NET应用程序,建议使用异步处理程序释放执行请求的线程

WCF有什么好的模式吗

谢谢,
正如您所描述的,这是一个潜在的可伸缩性问题

ASP.NET有一个线程池,我上次检查时是250个,但可以增加到1000个-可配置但超过1000个不是真正推荐的服务请求。ASP.NET中的HTTP请求具有线程关联性,因此这些线程和请求之间存在一对一的关系

当您调用externals服务时,请求线程将保持挂起状态,如果您的线程用完,您的客户端将收到503错误

扩展此服务的解决方案通常包括客户端请求启动操作,然后客户端将持续轮询该服务以查看其是否已完成。如果您将这些服务实现为轻量级和高效的,那么您会损失一点性能,但会获得如此多的可伸缩性

您还需要考虑:

存储结果以便客户机可以获得它。 如果客户端没有返回到服务器获取结果,则丢弃结果。
正如您所描述的,这是一个潜在的可伸缩性问题

ASP.NET有一个线程池,我上次检查时是250个,但可以增加到1000个-可配置但超过1000个不是真正推荐的服务请求。ASP.NET中的HTTP请求具有线程关联性,因此这些线程和请求之间存在一对一的关系

当您调用externals服务时,请求线程将保持挂起状态,如果您的线程用完,您的客户端将收到503错误

扩展此服务的解决方案通常包括客户端请求启动操作,然后客户端将持续轮询该服务以查看其是否已完成。如果您将这些服务实现为轻量级和高效的,那么您会损失一点性能,但会获得如此多的可伸缩性

您还需要考虑:

存储结果以便客户机可以获得它。 如果客户端没有返回到服务器获取结果,则丢弃结果。
我遇到了这个异步模式,它可能是这个问题的解决方案

我看起来像是一种在服务线程等待I/O完成时“释放”服务线程的方法。同时,从调用方的角度来看,它保留了操作的同步性质,也就是说,这是严格的服务端实现细节。缺点似乎是服务端的代码复杂:所有外部调用都必须使用Begin/End API

一些有用的链接:

我遇到了这个异步模式,它可能是这个问题的解决方案

我看起来像是一种在服务线程等待I/O完成时“释放”服务线程的方法。同时,从调用方的角度来看,它保留了操作的同步性质,也就是说,这是严格的服务端实现细节。缺点似乎是服务端的代码复杂:所有外部调用都必须使用Begin/End API

一些有用的链接: