由于我们的系统严重依赖的写得不好的第三方库,我遇到了问题。这个库不是线程安全的(因为一些bug和静态变量),我需要在ASP.NET webservice中使用它,它在一个单独的线程中处理每个用户请求。
我为这个问题尝试了很多解决方案。在我看来,现在最好的解决方案是让子进程处理请求。一个子进程将监听并处理一个用户的请求,因此我可以按用户方式同步对库代码的访问,这比在请求之间共享静态变量时所能做的要好得多。
如何在不重新启动方向盘的情况下将IPC通信接收的请求路由到相应的WebMethods?如果可能的话,我想使用.Net中的类来处理普通的ASP.NET Web服务,但是我很难找到他们的名字。
TL; DR :我有一个MyWebService类(继承自System.Web.Services.WebService),其中一些方法标有WebMethodAttribute,我想传递一个伪造的HttpRequest(或HttpContext) )并告诉它“处理它就像你从真正的HTTP服务器接收到它,尽管当前进程是一个控制台应用程序”。
答案 0 :(得分:0)
首先,您可能需要考虑使用WCF而不是ASMX,这是一项传统技术,仅用于向后兼容。
其次,您还有另一种选择:确保一次只有一个线程使用第三方库。围绕对第三方库的所有访问放置lock
块可以解决问题。