ASP.NET webservices如何路由请求和WebMethods?

ASP.NET webservices如何路由请求和WebMethods?,asp.net,web-services,ipc,Asp.net,Web Services,Ipc,我遇到了问题,因为我们的系统严重依赖一个写得很差的第三方库。这个库不是线程安全的,因为有一些bug和静态变量,我需要在ASP.NET Web服务中使用它,它在单独的线程中处理每个用户请求 我已经尝试了很多解决这个问题的方法。在我看来,目前最好的解决方案是让子流程处理请求。一个子进程将侦听并处理一个用户的请求,因此我可以以每个用户的方式同步对库代码的访问,这比在请求之间共享静态变量要好得多 如何将IPC通信接收到的请求路由到适当的WebMethods,而无需重新发明轮子?如果可能的话,我希望使用.

我遇到了问题,因为我们的系统严重依赖一个写得很差的第三方库。这个库不是线程安全的,因为有一些bug和静态变量,我需要在ASP.NET Web服务中使用它,它在单独的线程中处理每个用户请求

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

如何将IPC通信接收到的请求路由到适当的WebMethods,而无需重新发明轮子?如果可能的话,我希望使用.Net中的类在普通ASP.Net Web服务中处理这个问题,但是我很难找到它们的名称


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

首先,您可能想考虑使用WCF代替ASMX,这是遗留技术,只保留向后兼容性。


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

我已经尝试了锁定策略。确保一次只有一个线程使用第三方库意味着一次只有一个线程在服务器上执行。关于ASMX和WCF,我们仍然使用.Net 2.0 framework,现在不可能迁移到新版本。另外,WCF如何帮助我解决不通过web服务访问的问题?您是否知道.NET 3.5只不过是.NET 2.0 SP2是一些附加程序集?升级并不像你想象的那样是一个实际问题。WCF会有所帮助,因为它可以让您完全控制传入请求的发送。您可以相当轻松地将每个传入请求分派到AppDomains池中的一个池中执行。每个都有自己的第三方代码使用的静态副本。我同意WCF非常适合。但是,我已经说过,现在不可能迁移到新版本,因为我们已经决定跳过3.5并将新产品迁移到.NET4.0,但这不是现在的优先事项。我认为说服其他人将其迁移到WCF和4.0将是困难的,特别是考虑到这项任务的最后期限,但我会尝试一下。或者我可以简单地将我自己的请求破解到方法调用路由器,这是我在发布这个问题时试图避免的。我认为这将花费更少的时间,干扰更少的现有代码,但可维护性较差。感谢AppDomain池的建议。我不知道创建AppDomains是可能的。我将使用它们而不是进程。我已经意识到,如果我能以编程方式启动ASP.NET Web服务,并使其侦听特定端口或处理特定路径的请求,它将实现同样的效果。但是如果我们有30个用户,那么IIS中将运行30个Web服务,这可能比子流程方法的开销要大得多。此外,这种方法似乎不太安全。ASMX不能让您控制托管或侦听。WCF有。