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

Posted

技术标签:

【中文标题】从 jQuery 调用启用 AJAX 的 WCF 服务 - MVC 2【英文标题】:Calling AJAX-Enabled WCF Service from jQuery - MVC 2 【发布时间】:2011-05-29 00:58:53 【问题描述】:

我已经阅读了大量关于实现这一点的内容,而且看起来很简单。我创建了我的服务,非常简单(看起来像这样

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WeddingPhotographerService
    
    // Add more operations here and mark them with [OperationContract]
    [OperationContract]
    public bool AddNewSkill(string name, string description)
    
        IRepository<Skill> skillRepo = ObjectFactory.GetInstance<IRepository<Skill>>();

        var skill = new Skill  Name = name, Description = description ;
        skillRepo.Save(skill);
        return true;
    

够简单吧,那我把这个jQuery代码写在我的视野里

$(document).ready(function () 
    $("#AddSkill").click(function () 
        var data =  name: $("#NewSkill").val(), description: "" ;
        data = JSON.stringify(data)
        $.ajax(
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "WeddingPhotographerService.svc/AddNewSkill",
            data: data,
            dataType: "json",
            success: function () 
                $('#SkillListViewContainer').load('../AccountController/GetSkillControl');
            ,
            error: function (msg) 
                $("#AddSkillError").text(msg.d);
            
        );
    );
);

我的 WeddingPhotographerService.svc 在项目的根目录中,web.config 在我创建服务时添加了这个

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="WeddingPhotographer.WeddingPhotographerServiceAspNetAjaxBehavior">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <services>
    <service name="WeddingPhotographer.WeddingPhotographerService">
      <endpoint address="" behaviorConfiguration="WeddingPhotographer.WeddingPhotographerServiceAspNetAjaxBehavior"
        binding="webHttpBinding" contract="WeddingPhotographer.WeddingPhotographerService" />
    </service>
  </services>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
    multipleSiteBindingsEnabled="true" />
</system.serviceModel>

一切看起来都很简单,看起来应该可以工作,但是当我单击 AddSkill 时,Chrome javascript 控制台会返回 404 错误,所以它根本找不到服务(我打开控制台是因为当我点击按钮时,什么都没有发生。

我错过了什么吗?

顺便说一句,我也试过这个(因为这是 web.config 文件中的名称)

url: "WeddingPhotographer.WeddingPhotographerService.svc/AddNewSkill"

我仍然收到 Resource Not Found (404) 错误

【问题讨论】:

如果您的“WeddingPhotographerService.svc”位于其他项目中,您将如何称呼它?我有这种情况,希望你能帮助我。 【参考方案1】:

解决了,将jQuery AJAX调用中的url行改为

url: "../WeddingPhotographerService.svc/AddNewSkill"

一切都很好

【讨论】:

以上是关于从 jQuery 调用启用 AJAX 的 WCF 服务 - MVC 2的主要内容,如果未能解决你的问题,请参考以下文章

启用从 jQuery ajax 到不在 IIS 中托管的 WCF 服务的 CORS POST

从 jQuery AJAX 调用 WCF 服务方法返回 404

使用 POST 方法从 jQuery Ajax 调用 WCF 服务

使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService

将数据从 jquery ajax 请求传递到 wcf 服务失败反序列化?

我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?