2013-09-23 48 views
0

在C#XML Web服务类上,是否有可能让IIS在单独的线程中激发每个客户端请求......我需要从需要单独库的代码中添加需要eacj在单独的线程中运行Web服务请求

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

在多个客户端连接的情况下,每个请求需要在单独的线程中运行,但似乎IIS或WebService类使用了,这是造成与外部库

+0

如果您不能使用C#5.0的异步/等待功能:http://stackoverflow.com/questions/6385165/parallelasync-tasks-using-web-service-to-avoid-threads –

+0

我应该补充一点,主要原因是外部库过程有很多“投入”,因此需要分离出不同的请求,以确保“配料”不会交叉污染。 –

+0

Ela建议我在Web服务中产生一个新线程,现在我已经采取了简单的方法,然后Ela会执行外部进程,因为这看起来好像在做这个技巧。 我知道这种方法有风险,但现在,它的一个快速的tactucal解决方案,直到我可以将整个Web服务转换为WCF –

回答

2

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

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

+0

感谢Ela,标记为“UP”,因为这是我所采取的路线目前... –

+0

NP,请记住标记该问题也回答;)谢谢 – MichaC

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.是否需要在独立线程中处理请求取决于您是否具有内存/处理器以外的操作,比如网络/硬盘IO