415 不支持的媒体类型从 $.ajax 调用 WCF 服务 [英] 415 Unsupported Media Type Calling WCF Service from $.ajax
问题描述
我正在尝试从 ASPX 页面调用 WCF Web 服务,如下所示:
I am attempting to call a WCF web service from an ASPX page like so:
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 服务的配置问题,其定义如下:
Doing so results in the web server returning the error 415 Unsupported Media Type
. I'm sure this is a configuration issue with the WCF service which is defined as follows:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
void ReNotify(int applicationKey);
web.config
文件中没有条目,因此假设服务使用默认配置.
There are no entries in the web.config
file so assume that the service uses the default configuration.
推荐答案
我不是这方面的专家,事实上我遇到了同样的问题(出于另一个原因).但是,似乎 WCF 服务本身并不支持 AJAX,因此您必须在 web.config 文件中包含以下代码才能启用它.
I am no expert in this, in fact I had the same problem (for another reason). However, it seems that WCF services don't inherently support AJAX and therefore you must have the following code in your web.config file to enable it.
<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 生成的.
This is what was generated by VS 2012 when I Added an AJAX enabled WCF service.
这篇关于415 不支持的媒体类型从 $.ajax 调用 WCF 服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!