2011-12-20 22 views
1

首先失敗,我不相信我的問題是this重複。調用頁面和asmx Web服務位於相同的Web站點中,處於相同的層次級別,並且頁面具有訪問asmx文件的權限。

現在,對我的問題。

我有一個網站,我發展,做對SQL Server的一些長期運行的流程。我已經決定標準ajaxloader.gif不足以滿足我的需求,因爲任務可能需要不同的時間(15秒到5分鐘以上)。

所以,我已經開發的2個Web服務的系統來處理呈現給用戶的實際進展。第一個Web服務完成工作,更新Service類中的共享變量。第二個Web服務每半秒左右調用一次(有時我將其設置爲100ms的時間間隔),並從共享變量中讀取進度值。

現在,這個系統精美的作品在IE瀏覽器(我與IE9的工作),但似乎在FF和Chrome(包括Windows和OS X)完全失敗。它也沒有在Safari在OS X

我試着開始學習在非IE瀏覽器來調試,但我掙扎存在(這可能是爲什麼我不知道這一點)。我在JavaScript/jQuery代碼中設置了斷點,但它們從未被觸發。我在我的JS/jQuery代碼中設置了「調試器」區域,而那些停止IE,但不要停止FF和Chrome(我認爲這似乎是「正確的」行爲)。所以,我在我的服務代碼隱藏文件中設置了斷點,並且它們似乎被觸發了大約1次。所以,它並沒有完全失敗,但確實失敗了很多。正如我所提到的,它在IE上並沒有失敗。我試着在FireFox上調試FireFox(Windows),但是我一直無法從錯誤代碼中獲得有用的信息。據我所知,我只是回到錯誤ErrorText =「錯誤」。 (沒有用!)

這裏是我的jQuery代碼:

function LongRunningProcess() { 
    debugger; 
    $('#progressBar').show(); 
    $('#progressLabel').show(); 
    var b = $('#<%= startDateTextBox.ClientID %>').datepicker("getDate"); 
    var e = $('#<%= endDateTextBox.ClientID %>').datepicker("getDate"); 
    var bString = (b.getMonth() + 1) + '/' + b.getDate() + '/' + b.getFullYear(); 
    var eString = (e.getMonth() + 1) + '/' + e.getDate() + '/' + e.getFullYear(); 
    var params = '{beginningDateString:"' + bString + '", endingDateString:"' + eString + '"}'; 
    $.ajax({ 
     type: "POST", 
     url: "Service.asmx/LongRunningProcess", 
     data: params, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: Returned, 
     error: ShowError 
    }); 
    GetProgress(); 
} 
function GetProgress() { 
    $.ajax({ 
     type: "POST", 
     url: "Service.asmx/ShowProgress", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: ProgressReturned, 
     error: ShowError 
    }); 
} 
function Returned(missing) { 
    // This code isn't important/doesn't affect my question, 
    // but it does exist and catch the return in IE 
} 
function ProgressReturned(progress) { 
    $('#progressBar').progressbar("option", "value", progress.d.Progress); 
    $('#progressLabel').html(progress.d.Step + ' (' + progress.d.Progress.toFixed(2) + '%)'); 
    if (progress.d.Progress < 100) { 
     setTimeout(GetProgress, 100); 
    } else { 
     $('#progressBar').progressbar("option", "value", 0); 
     $('#progressLabel').html('Done.'); 
     $('#progressBar').hide(); 
     $('#progressLabel').hide(); 
    } 
} 
function ShowError(request, error) { 
    debugger; 
    alert(error); 
} 

我是新十歲上下到ASP.NET Web編程和很新的JavaScript和jQuery的,但我試圖這樣做很好的研究並弄清楚這些事情是如何工作的。另外,就像我說的,上面的代碼在IE9中運行的非常漂亮(完全如我所願)。另外,在非IE瀏覽器上,在「Service.asmx/LongRunningProcess」的第一行設置的斷點很少被觸發/符合。所以,我不認爲代碼錯誤是在我的VB.NET代碼,這就是爲什麼我沒有發佈它。我有語法錯誤還是什麼?

+0

當超時時,IE可能更寬容一些。由於這個原因,它通常不是一個好的想法,有一個長期運行的Web服務。你能把它分解成多個較短的Web服務調用嗎? – jrummell 2011-12-20 13:21:25

+0

不,加上非IE瀏覽器中的錯誤會立即發生。它在任何方面似乎都不是超時問題。另外,不是長時間運行的流程是我們首先使用ajax的原因之一嗎? – mbm29414 2011-12-20 13:23:59

+0

這應該有助於開始使用Firebug進行調試 - http://getfirebug.com/wiki/index.php/Net_Panel。在控制檯和網絡面板中的響應細節中查找錯誤。沒有錯誤信息,很難說這裏可能是什麼問題。 – jrummell 2011-12-20 13:31:52

回答

0

據我所知,這是簡單的「返回false;」我錯過了。

相關問題