实现启用 AJAX 的 WCF 服务 - 来自 JQuery 的调用没有响应

Posted

技术标签:

【中文标题】实现启用 AJAX 的 WCF 服务 - 来自 JQuery 的调用没有响应【英文标题】:Implementing an AJAX enabled WCF Service - call from JQuery not responding 【发布时间】:2016-05-15 23:10:55 【问题描述】:

我正在浏览 MSDN 上发布的一个示例,但我无法开始工作。我在 VS2015 中有一个带有 AJAX Enabled WCF 服务的 ASP Web 窗体项目。我已经点击了 Cntrl-F5,它工作正常。我尝试在浏览器中输入 URI 并得到适当的响应。

然后,我将启用 Ajax 的 ScriptManager 添加到 Default.aspx 设计视图并右键单击“属性”视图。我添加了我的服务名称:

这是服务本身:

namespace CandidateTest.Service
[ServiceContract(Namespace = "CandidateTest.Service")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class eThorService

    public string button;
    [WebGet()]
    [OperationContract]
    public void getUpdate()
    
        _Default def = new _Default();
        Console.WriteLine("WCF service working");
        def.RenderData(button);
    

这是我试图从中调用服务的 jquery 脚本:

$(function () 
//while ($('#eThorButton').text != "Stop") 
if ($('#eThorButton').click) 
    alert("APC2");
$.ajax(

    url: 'http://localhost:49620/Service/eThorService.svc/getUpdate',
    method: 'post',
    dataType: 'json',
    success: function()
        alert("success");
    ,
    error: function (err) 
        alert(err);
     
)
//delay(1000);
alert("Here");
 


);

创建服务对我的 web.config 所做的更改是默认的,我没有更改:

<system.serviceModel>
<services>
  <service name="CandidateTest.Service.eThorService">
    <endpoint address="" behaviorConfiguration="CandidateTest.Service.eThorServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="CandidateTest.Service.eThorService" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="CandidateTest.Service.eThorServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />

端点为空,这可能是个问题?

所以基本上这是我第一次尝试在 WCF 中创建启用 AJAX 的服务,并且脚本不会调用该服务。我添加的警报是为了查看我的脚本是否正在使用该服务,而它似乎没有。

我已经按照enter link description here 上的示例进行了操作 这适用于 VS2012,但我希望这不是问题。我需要做什么才能让我的脚本调用服务?

编辑

在 Chrome 的开发工具中检查脚本时,我收到两个错误 -

很明显,我的脚本无法找到我的网络服务,尽管它似乎是正确的 URL。

编辑 我修复了脚本引用错误,但我的服务调用仍然返回 404

【问题讨论】:

【参考方案1】:

您的页面似乎没有对 jQuery javascript 文件的引用。

您的 ajax 调用使用 POST 动词,但您的服务设置了 WebGet() 属性,这意味着您需要修改 ajax 调用以使用 GET 作为动词:

$.ajax(

    url: 'http://localhost:49620/Service/eThorService.svc/getUpdate',
    method: 'get',
    dataType: 'json',
    success: function()
        alert("success");
    ,
    error: function (err) 
        alert(err);
     
)

【讨论】:

谢谢,现在添加了脚本参考。但是仍然有 404 访问我的服务。

以上是关于实现启用 AJAX 的 WCF 服务 - 来自 JQuery 的调用没有响应的主要内容,如果未能解决你的问题,请参考以下文章

从 jQuery 调用启用 AJAX 的 WCF 服务 - MVC 2

从启用 AJAX 的 WCF 服务加载 Handsontable

ajax内调用WCF服务

使 WCF 服务接受来自 jQuery.AJAX() 的 JSON 数据

如何为自托管 WCF 服务启用跨域调用

如何在 WCF RESTful 服务上启用 HTTPS?