$.ajax
我正在尝试使用 jQuery方法设置 WCF 服务来处理 AJAX 请求。我无法让 IIS 正确托管我的服务。我一直在查看MSDN和一些codeproject文章,试图找出为什么每当我尝试在浏览器中键入端点时都会收到 404 错误。
我认为我的问题在于我试图应用于我的服务接口或实现类的实际托管和属性。我从来不需要设置 web.config,但它看起来很简单,我只是不知道我需要什么才能进行 AJAX 调用。
当我尝试将浏览器指向服务端点时,我无法显示任何元数据。我目前正在尝试任何组合
"http://localhost/Knockout/AjaxDataService.svc/TestAjaxCall"
"/Knockout/AjaxDataService.svc/TestAjaxCall"
"/AjaxDataService.svc/TestAjaxCall"
"AjaxDataService.svc/TestAjaxCall"
他们都没有工作。我在 Chrome 中收到 404 错误消息
到目前为止,我想我会发布我的代码,而我自己正在努力寻找答案,以防有人可能很容易看出我为什么会失败......
编辑:我可能缺少 web.config 中的一些元素,这些元素需要在 IIS 中托管 WCF 服务,但我无法就将端点公开给 AJAX 调用所需的内容达成一致。似乎我试图通读以帮助我解决这个问题的每一篇文章在接口、实现类和 web.config 的设置方式上都存在差异。
编辑:也许我的文件夹层次结构会对此有所帮助?我C:/inetpub/wwwroot/Knockout
在 IIS 中作为我的应用程序的目录。在那个文件夹中,我有这些项目
/App_Code
AjaxDataService.svc.cs
/jQuery
jquery-1.10.0.min.js
/ViewModel
ViewModel.js
AjaxDataService.svc
Default.aspx
Default.aspx.cs
Default.js
knockout.js
web.config
AjaxDataService.svc
<%@ServiceHost language=c# Debug="true" Service="KnockoutDemo.AjaxDataService" %>
AjaxDataService.svc.cs
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Web.Script.Services;
namespace KnockoutDemo
{
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class AjaxDataService : IAjaxDataService
{
public string GetThatString()
{
return "That String!";
}
public string TestAjaxCall()
{
return "Ajax works!";
}
}
[ServiceContract]
[ScriptService]
public interface IAjaxDataService
{
[OperationContract]
string GetThatString();
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
string TestAjaxCall();
}
}
网络配置
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<services>
<service name="KnockoutDemo.Services.AjaxDataService"
behaviorConfiguration="AjaxServiceBehavior">
<endpoint address=""
binding="basicHttpBinding"
contract="KnockoutDemo.Services.IAjaxDataService"/>
<endpoint address=""
binding="mexHttpBinding"
contract="IMetadataExchange"/>s
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="AjaxServiceBehavior" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
<behavior name="returnFaults"
returnUnknownExceptionsAsFaults="true"/>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>