在单独的线程中运行Web服务请求

时间:2013-09-23 07:59:41

标签: c# multithreading iis

在C#XML Web Service类上,是否有可能让IIS在单独的线程中提出每个客户端请求...我需要从需要eacj的单独库中添加一些代码

public class FlightOperationsService : WebService
{
    public string SayHello()
    {
        return (ExternalLibary.RunRequest()); // Must be in separate thread
    }
}

在多个客户端附加的情况下,每个请求都需要在单独的线程中运行,但看起来IIS或WebService类使用的同一个线程会导致外部库出现问题

2 个答案:

答案 0 :(得分:2)

如果你使用.net4.5尝试实现asyn / await并检查这是否解决了你的问题。 否则,您可以从System.Threading创建一个新线程。

请注意,创建新线程会占用服务器上的大量资源!如果你有大量的客户端连接,这是不合适的。

答案 1 :(得分:0)

ThreadPool.QueueUserWorkItem 但这不是你的场景,因为你需要直接在函数中返回字符串。更改代码的唯一方法是在.net 4.5中使用await / async,否则你需要使用一些async io方法。这意味着您需要传入上下文,并在以后填充上下文中的值。 说

public IAsyncResult SayHello(AsyncContext context)
{
     // start a new async operation and return the IAsyncResult
}

void RealWork(AsyncContext context)
{
    context.SetValue("some thing");
}

它只是一个原型,真正的单词更难。但我有建议在这里尝试程序编程you can get the sample and binary here, http://procedure.codeplex.com/。作为项目的所有者,抱歉,我为自己制作了一个广告......如果您需要一些介绍或进一步的建议,请随时给我留言。

P.S。是否需要在一个单独的线程中处理请求取决于你是否有内存/处理器以外的操作,比如network / harddisk IO