簡體   English   中英

.NET上的WebServices是否同步/同步?

[英]Are WebServices asynch/synch on .NET?

我從客戶端調用了30次WebService方法(asmx):

for (var i = 0; i < 30; i++) {
    WSCustom.Test(i,
        function (res) {
            $("#Results").append(res + "<br />");
        }, 
        function (res) { 
            $("#Results").append(res.get_message() + "<br />"); 
        }
    );
}

這是WebService方法:

[WebMethod(EnableSession = true)]
public string Test(int i)
{
    DateTime m_oStart = DateTime.Now;
    WebClient m_oClient = new WebClient();

    if (i % 2 == 0)
    {
        byte[] res = m_oClient.DownloadData("http://www.repubblica.it/");
    }

    return String.Format("TotalSeconds:{0}", new string[] { DateTime.Now.Subtract(m_oStart).TotalSeconds.ToString() });
}

我所關心的是異步回復。

我的意思是,我應該得到立刻回復15(奇數i就立刻返回),並在時間回復的休息(這需要時間來下載頁面服務器端)。

但是實際上,輸出是不同的:它立即處理第一個呼叫。 比,它等待第二完畢,比我得到一些奇怪的i回復,等等。

因此,它根本不算緊。

WebServices如何管理.NET中的客戶端調用? 我可以在整個過程中進行緊急處理嗎?

編輯

如果EnableSession = false則結果如下:

TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:1,514
TotalSeconds:0
TotalSeconds:1,857
TotalSeconds:0
TotalSeconds:2,143
TotalSeconds:0
TotalSeconds:1,88
TotalSeconds:0
TotalSeconds:3,178
TotalSeconds:0
TotalSeconds:3,562
TotalSeconds:2,095
TotalSeconds:0
TotalSeconds:0
TotalSeconds:4,221
TotalSeconds:1,749
TotalSeconds:0
TotalSeconds:0
TotalSeconds:3,717
TotalSeconds:0
TotalSeconds:1,977
TotalSeconds:2,421
TotalSeconds:2,439
TotalSeconds:1,807
TotalSeconds:2,124

因此這不是會話錯誤。

您的網絡方法上具有EnableSession=true 這實際上將使呼叫排隊,因為會話對象將針對每個請求被鎖定。

如果不使用會話,則不應啟用它。


http://msdn.microsoft.com/en-us/library/aa478952.aspx

為了提供GetItemExclusive所需的排他性,會話狀態提供程序必須實現一種鎖定機制,以防止給定會話被兩個或多個需要對會話狀態進行讀/寫訪問的並發請求訪問。 該機制通過防止並發請求覆蓋彼此的更改來確保會話狀態的一致性。 即使會話狀態數據源是由多個Web服務器共享的遠程資源,鎖定機制也必須起作用。

它是異步的,因為該方法不會在javascript中阻塞,而是在操作完成后觸發回調。

它可以並行化也可以不並行化 ,這與異步化不同。

請注意,大多數瀏覽器都會限制並發AJAX請求的數量。 您當然不能一次發送30個請求。 通常您只會看到1-3個左右的數字。 這就是為什么您通常會看到所有請求的順序,而不是所有請求都在同一時間返回。

WebService是由defualt按線程分類的。 如果遇到問題,請嘗試在連接字符串中插入Pool Size = 10或更大,請注意,如果您使用一種通用對象,請注意:

 lock (myObjList)
            {
                ...
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM