0

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

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

在多个客户端连接的情况下,每个请求都需要在单独的线程中运行,但似乎 IIS 或 WebService 类使用相同的线程,这会导致外部库出现问题

4

2 回答 2

2

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

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

于 2013-09-23T08:02:45.110 回答
0

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

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

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

它只是一个原型,真正的单词要难得多。但我有一个建议在这里尝试程序编程,你可以在这里获得示例和二进制文件,http://procedure.codeplex.com/。作为项目的所有者,对不起,我为自己做了一个广告……如果您需要一些介绍或进一步的建议,请随时给我留言。

PS是否需要在单独的线程中处理请求取决于您是否有内存/处理器以外的操作,例如网络/硬盘IO

于 2013-09-23T08:12:29.693 回答