2011-06-22 25 views
4

我一直在嘗試解決這個問題一段時間,但尚未成功。 我有一個基本的ASP.NET WebService,我試圖從JavaScript調用。Javascript - 調用ASP.NET WebService - 服務器方法'methodName'失敗

using System; 
using System.Web; 
using System.Web.Services.Protocols; 
using System.Web.Services; 
using System.Web.Script.Services; 

namespace RandomWebServices 
{ 
/// <summary> 
/// Summary description for WebServices1 
/// </summary> 
[WebService(Namespace = "http://localhost:2900/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class WebServices1 : WebService 
{ 
    [WebMethod] 
    public string PieTable(string table) 
    { 
     return table + " - resultant text"; 
    } 
} 
} 

簡單...是嗎? 那爲什麼,當我嘗試從JavaScript調用它,我得到以下幾點:

"Error: The server method 'PieTable' failed."

我打電話的WebService如下:

<script type="text/javascript"> 
function CallService() { 
    RandomWebServices.WebServices1.set_defaultSucceededCallback(Callback); 
    RandomWebServices.WebServices1.set_defaultFailedCallback(OnError); 

    RandomWebServices.WebServices1.PieTable("Pie"); 

    return false; 
} 

function Callback(result) { 
    alert("asd"); 

    var outDiv = document.getElementById("outputDiv"); 

    if (outDiv == null) { 
     alert("outputDiv not found"); 

     return false; 
    } 
    else { 
     alert("outputDiv found"); 

     outDiv.innerText = result; 
    } 

    return false; 
} 

function OnError(result) { 
    alert("Error: " + result.get_message()); 
} 
</script> 

我打電話從以下對象的JavaScript:

<input value="Load" onclick="CallService(); return false;" type="button" /> 

我使用AJAX的ToolkitScriptManager對象引用的WebService:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
<Services> 
    <asp:ServiceReference Path="http://localhost:2900/WebServices1.asmx" /> 
</Services> 
</asp:ToolkitScriptManager> 

請協助。 在此先感謝。 Marco

回答

1

如果您是使用.NET 4的而不是,那麼您需要執行配置條目以啓用腳本服務。見http://msdn.microsoft.com/en-us/library/bb398998(v=VS.90).aspx。所以請確保您在web.config中有以下部分。

<system.web> 
    ... 
    <httpHandlers> 
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" 
     type="System.Web.Script.Services.ScriptHandlerFactory" 
     validate="false"/> 
    </httpHandlers> 
    ... 
<system.web> 

爲了排除故障,你可以看一下異常的堆棧跟蹤 - 例如,

function OnError(result) { 
    alert("Error: " + result.get_message()); 
    alert("Stack Trace: " + result.get_stackTrace()); 
} 
0

我在過去發現,把()ScriptService後的屬性宣佈網絡服務類有貌似解決了一些奇怪的問題。不知道爲什麼它可能有效,但也值得一試。

[WebService(Namespace = "http://localhost:2900/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService()] 
public class WebServices1 : WebService 
{ 
    [WebMethod] 
    public string PieTable(string table) 
    { 
     return table + " - resultant text"; 
    } 
}