0

由于我们的系统严重依赖于编写不佳的第三方库,我遇到了问题。这个库不是线程安全的(因为一些错误和静态变量),我需要在一个 ASP.NET 网络服务中使用它,它在一个单独的线程中处理每个用户请求。

我已经为这个问题尝试了很多解决方案。在我看来,目前最好的解决方案是让子流程处理请求。一个子进程将侦听和处理一个用户的请求,因此我可以以每个用户的方式同步对库代码的访问,这比我在请求之间共享静态变量时所能做的要好得多。

如何在不重新发明轮子的情况下将通过 IPC 通信接收到的请求路由到适当的 WebMethods?如果可能的话,我想使用 .Net 中的类在普通的 ASP.NET Web 服务中处理这个问题,但是我很难找到它们的名字。

TL;DR:我有一个 MyWebService 类(继承自 System.Web.Services.WebService),其中一些方法用 WebMethodAttribute 标记,我想将一个虚构的 HttpRequest(或 HttpContext)传递给它并告诉它“像处理它一样尽管当前进程是控制台应用程序,但您是从真正的 HTTP 服务器接收到的”。

4

1 回答 1

0

首先,您可能需要考虑使用 WCF 而不是 ASMX,这是一项遗留技术,仅为了向后兼容而保留。

其次,您还有另一个选择:确保一次只有一个线程使用第三方库。lock在对第三方库的所有访问权限周围放置块可能会解决问题。

于 2012-05-15T16:06:45.987 回答