2013-09-23 87 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