2

我整天研究这个问题,这似乎是一个有点普遍的问题,但我一直无法找到解决方案。

我正在使用 jquery 的$.ajax()函数进行更新数据库中某些值的服务调用。它在本地主机上运行良好,但在实际服务器上,我在控制台窗口中收到 500 内部服务器错误。

我的客户端代码如下:

var param = FunctionToMakeKeyValueString();
$.ajax({
    type: "POST",
    url: "../Helpers/Autocomplete.asmx/OrderStatements",
    data: { param: param },
    clientType: "application/json; charset=utf-8",
    datatype: "json",
    async: true,
    success: function () { ShowSuccess();},
    error: function () { ShowError(); }
});

服务器端代码是:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class AutoComplete : System.Web.Services.WebService {

    public AutoComplete () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public void OrderStatements(string param)
    {
        IncomeStatementService service = new IncomeStatementService();

        string[] comps = param.Split(';');
        foreach (string s in comps)
        {
            int id;
            short order;
            string[] pieces = s.Split(':');
            if (int.TryParse(pieces[0], out id) && short.TryParse(pieces[1], out order))
            {
                IncomeStatement statement = service.FindBy(id);
                statement.Order = order;
                service.UpdateOrder(statement);
            }
        }
    }
}

实际的 asmx 文件只是

 <%@ WebService Language="C#" CodeBehind="~/App_Code/AutoComplete.cs" Class="AutoComplete" %>

我确定 url 是正确的(.js 文件位于 Helpers 的同级文件夹中,其中包含 asmx),但是我需要在 IIS 或 web.config 文件中设置其他内容吗?谢谢!

4

3 回答 3

2

@Mike W 的评论让我稍微查看了服务器错误日志,我发现:

Exception type: InvalidOperationException 
Exception message: Request format is unrecognized for URL unexpectedly ending in '/OrderStatements'.

我用谷歌搜索了这条消息,它让我找到了这个堆栈溢出问题 ,看起来就像将它添加到我的配置文件的 systen.web 部分一样简单:

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>
于 2013-10-26T14:42:28.003 回答
1

您可以尝试将以下行添加到您的 web.config httpHandlers

<system.web>
  <httpHandlers>
     <add verb="*" path="*.asmx" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services" />
  </httpHandlers>
</system.web>
于 2013-10-25T23:49:17.923 回答
0

您在 JavaScript/Jquery 中提供的主机链接可能有问题

请记下如果您在 chrome 中查看此内容,请清除浏览器数据,您将在两端看到相同的结果

于 2017-01-25T23:44:54.823 回答