【问题标题】:415 Unsupported Media Type Calling WCF Service from $.ajax415 不支持的媒体类型从 $.ajax 调用 WCF 服务
【发布时间】:2012-07-13 17:07:30
【问题描述】:

我正在尝试从 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 文件中没有条目,因此假定服务使用默认配置。

【问题讨论】:

    标签: jquery asp.net ajax wcf c#-4.0


    【解决方案1】:

    我不是这方面的专家,事实上我遇到了同样的问题(出于另一个原因)。但是,似乎 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]
        }
    }
    

    这是 VS 2012 在我添加启用 AJAX 的 WCF 服务时生成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2012-11-03
      • 2014-05-10
      • 2019-05-01
      相关资源
      最近更新 更多