2013-04-18 25 views
3

C#ASP.NET 3.5執行Web服務方法,並立即返回

是否可以「發射後不管」的網絡服務,是不是異步或單向的方法?

有一種方法返回一個值(經過一些處理後),我不需要。它被另一個組織(誰寫了服務)使用。基本上,它只是通知用戶x做了行動y。我只需要調用該方法並繼續前進,而不必等待結果。

我嘗試使用帶有RunWorkerAsync的BackgroundWorker(),但該方法由於某種原因不會觸發。我無法更改Web服務方法,因爲我無法訪問其代碼。我應該使用BackgroundWorker,Invoke,ThreadPool,還有其他的東西嗎?我不需要返回結果,我不需要知道它是否失敗。基本上,調用方法,如果它的工作,很好。如果不是,我不想停止或減慢處理速度。

public static void Test() 
{ 
    var worker = new BackgroundWorker(); 
    worker.DoWork += Test2; 
    worker.RunWorkerAsync(new object[] {12345, "test"}); 
} 

private static void Test2(object sender, DoWorkEventArgs e) 
{ 
    // Write to log that we got into the method - does not 
    object[] args = e.Argument as object[]; 
    int num = Convert.ToInt32(args[0]); 
    string name = (string)args[1]; 
    // call web service method here.... 
} 
+0

這取決於您的網站架構。你怎麼稱呼你的服務?您是否每次創建wcf客戶端代理的新實例?它是一個頁面類字段(可能注入)?請添加缺少的代碼。 – 2013-04-22 11:54:03

回答

-1

在Asysn/Sync wfc調用中有一個文檔。 http://msdn.microsoft.com/en-us/library/ms734701.aspx

+0

-1他明確詢問了不是異步或單向的Web服務調用。 – 2013-04-18 02:23:12

+0

爲什麼它被標記爲wcf?異步http發佈將適用於asmx調用。我以前做過這個會尋找一個例子。 – 2013-04-18 02:31:13

+0

你將不得不問問標籤的人,而不是我。也許他沒有使用遺留代碼(ASMX)。 – 2013-04-18 02:32:49

1

Intsead使用後臺工作,你可以嘗試要求,顧名思義就是WCF單向以下

public static void Test() 
    { 
     System.Threading.ThreadPool.QueueUserWorkItem(delegate 
     { 
      Test2(new object[] { 12345, "test" }); 
     }); 
    } 

    private static void Test2(object data) 
    { 
     // Write to log that we got into the method - does not 
     object[] args = data as object[]; 
     int num = Convert.ToInt32(args[0]); 
     string name = (string)args[1]; 
     // call web service method here.... 
    } 
1

的功能。在客戶端完全實現所需的行爲是不可能的。

IIS默認情況下(一個公共的WCF服務主機)被允許終止任何由關閉的連接啓動的進程。這意味着客戶必須在整個過程中保持連接(實際上意味着等待結果)。此外,請求可能會超時,並且「火災和遺忘」進程將被終止。

如果您只想在客戶端佔用的資源減到最少,同時請求正在運行,我會異步運行請求。如果您只能訪問.net < = 4.0,那麼最簡單的方法是使用「添加服務引用」選項生成異步調用(我的意思是APM async和NOT async/await/TPL async),並勾選「生成異步方法「選項。

你將不得不學習APM編程模型(這是非常討厭的)。

或者,您可以在單獨的線程上運行WCF調用。但請注意,這需要大量額外資源。