我试图从ASPX页面调用WCF Web服务,如下所示:
var payload = {
applicationKey: 40868578
};
$.ajax({
url: "/Services/AjaxSupportService.svc/ReNotify",type: "POST",data: JSON.stringify(payload),contentType: "application/json",dataType: "json"
});
这样做会导致Web服务器返回错误415 Unsupported Media Type.我确定这是WCF服务的配置问题,定义如下:
[OperationContract] [WebInvoke(Method = "POST",RequestFormat = Webmessageformat.Json)] void ReNotify(int applicationKey);
web.config文件中没有条目,因此假设该服务使用默认配置.
解决方法
我不是这方面的专家,事实上我遇到了同样的问题(另一个原因).但是,似乎WCF服务本身并不支持AJAX,因此您必须在web.config文件中包含以下代码才能启用它.
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="NAMESPACE.AjaxAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="NAMESPACE.SERVICECLASS">
<endpoint address="" behaviorConfiguration="NAMESPACE.AjaxAspNetAjaxBehavior"
binding="webHttpBinding" contract="NAMESPACE.SERVICECLASS" />
</service>
</services>
</system.serviceModel>
然后在服务类中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
namespace NAMESPACE
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SERVICECLASS
{
// To use HTTP GET,add [WebGet] attribute. (Default ResponseFormat is Webmessageformat.Json)
// To create an operation that returns XML,// add [WebGet(ResponseFormat=Webmessageformat.Xml)],// and include the following line in the operation body:
// WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
[OperationContract]
public string DoWork()
{
// Add your operation implementation here
return "Success";
}
// Add more operations here and mark them with [OperationContract]
}
}
这是我在添加启用AJAX的WCF服务时由VS 2012生成的内容.