1

我有一个 ASP.net 应用程序,它正在对位于同一目录中的 VB.net Web 服务进行 jQuery AJAX 调用。在我们的测试盒上,一切都运行良好。在生产中,如果我转到 web 服务的测试表单,我可以检索数据。但是,AJAX 调用会导致 500 错误。这是 AJAX 代码:

$.ajax({
    type: "POST",
    url: "webservice.asmx/Action",
    data: "{'SearchString':'" + request.term + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (res) {
        alert("Success");            
    },
    error: function () {
    alert("Fail");
    }
});

我试过了:

  1. 在该调用中摆弄数据参数的格式
  2. 设置 web 服务的响应格式 ([ScriptMethod(ResponseFormat = ResponseFormat.Json)])
  3. 将此添加到 Web.Config:

.

<webServices>
     <protocols>
         <add name="HttpSoap" />
         <add name="HttpGet" />
         <add name="HttpPost" />
      </protocols>
</webServices>

一切都是徒劳的。这仅在从此函数调用时失败,并且仅在我们的生产盒上。如果我直接从 .asmx 页面的表单加载操作,它工作正常。

我的想法是我们的​​测试服务器和生产服务器之间一定存在配置差异,但我找不到会产生任何后果的配置差异。此外,当服务器以相同的方式处理它们时,什么样的配置会导致它在以一种方式调用而不是另一种方式调用时不起作用?

有没有人遇到过他们已经解决的类似问题?

4

2 回答 2

0

我能够将错误追踪到:

Request format is invalid: application/json; charset=UTF-8

一些研究使我在另一个 StackOverflow 问题上得到了这个答案:正确答案

现在一切都很好。

于 2013-05-09T16:46:49.833 回答
0

请检查以下内容:

  1. 在部分内添加以下<webServices>内容(在<system.web>部分内):

    <protocols>
        <add name="HttpGet"/><add name="HttpPost"/>
    </protocols>
    

  2. 将以下内容添加到web.config 的部分(部分内部)(如本<handlers>论坛所述):<system.webServer><configuration>

     <add name="ScriptHandlerFactory" verb="*" path="*.asmx" 
     preCondition="integratedMode" 
     type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,  
     Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    
     <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" 
     preCondition="integratedMode" 
     type="System.Web.Script.Services.ScriptHandlerFactory, 
     System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
     PublicKeyToken=31BF3856AD364E35" />
    

就我而言,这解决了这个问题。我必须添加两个步骤 1. 和 2.,单独一个没有帮助。

于 2014-10-31T13:25:49.213 回答