WCF + JSONP:总是收到“方法不允许”错误消息

Posted

技术标签:

【中文标题】WCF + JSONP:总是收到“方法不允许”错误消息【英文标题】:WCF + JSONP: always get a "method not allowed" error message 【发布时间】:2011-12-07 07:14:30 【问题描述】:

在纯 javasript/html 页面上使用 JSONP 调用 WCF Web 服务解决跨域问题,收到错误消息“方法不允许”,在网上做了很多搜索,但没有得到有效的解决方案..

架构:WCF 3.5 + JSONP + JQuery

为了在 WCF 3.5 中启用 JSONP 功能,我添加了 MSDN JSONP 示例库文件:

JSONPBehavior.cs
JSONPBindingElement.cs
JSONPBindingExtension.cs
JSONPEncoderFactory.cs

来自http://msdn.microsoft.com/en-us/library/cc716898.aspx。 关注这个帖子:http://jasonkelly.net/2009/05/using-jquery-jsonp-for-cross-domain-ajax-with-wcf-services/

IService1.cs:

namespace WcfServiceForConnDatabase

    [ServiceContract]
    public interface IService1
    
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "GetData")]
        [JSONPBehavior(callback = "method")] 
        string GetData();
    

service.cs:

namespace WcfServiceForConnDatabase


    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
    public class Service1 : IService1
    
         public string GetData()
        
            return "Successfully connect with the WCF Web Service";
        
    

web.config:

<?xml version="1.0"?>
<configuration>
    <!-- WCF configuration -->
    <system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="WcfServiceForConnDatabase.Service1Behavior">          
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <services>
            <service name="WcfServiceForConnDatabase.Service1">
                <endpoint address="" behaviorConfiguration="WcfServiceForConnDatabase.Service1Behavior" binding="customBinding" bindingConfiguration ="jsonpBinding" contract="WcfServiceForConnDatabase.IService1"/>
      </service>
      </services>
    <bindings>
      <customBinding>
        <binding name="jsonpBinding" >
          <jsonpMessageEncoding />
          <httpTransport manualAddressing="true"/>
        </binding>
      </customBinding>
    </bindings>
    <extensions>
      <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="WcfServiceForConnDatabase.JsonpBindingExtension, WcfServiceForConnDatabase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      </bindingElementExtensions>
    </extensions>
    </system.serviceModel>
    <system.web>
        <compilation debug="true"/>
    </system.web>

前端:

$.ajax(
            url: "http://192.168.0.23/Service1.svc/GetData",
            type: "GET",
            jsonpCallback: "TestData",
            contentType: "application/json",
            dataType: "jsonp",
            error: function () 
                alert("Error");
            ,
            success: function (data) 
                alert("Success");
            
        );

    

网络结构是这样的: 局域网中的两台 PC;一台用于客户端 javascript 页面,另一台用于 Web 服务 (192.168.0.23)。

希望有人能给我一些建议!!!谢谢大家!

【问题讨论】:

【参考方案1】:

在jQuery AJAX调用(跨域)中使用WCF时必须考虑的事项;

    在单独的 Visual Studio 实例中运行 WCF 服务项目。不要在一个实例中混合 WCF 服务项目和消费项目并立即运行。当您运行消费项目时,WCF 项目必须已经启动并运行。 使用 DataType 作为 jsonp 而不是 json。 在 WCF 项目的 web.config 中,确保您在 \\ 下的标记中具有属性 crossDomainScriptAccessEnabled="true"。还将绑定名称设置为标记中的 bindingConfiguration 属性。

查看这里了解更多信息:

Consuming a WCF Service in jQuery via AJAX Call in a different Project (Cross Domain)

【讨论】:

以上是关于WCF + JSONP:总是收到“方法不允许”错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Restful WCF IIS 7.5 405 方法不允许间歇

WCF 错误:405 方法不允许

WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:

jsonp跨域请求

WCF 自托管命令行返回 503 错误

WCF 服务返回“方法不允许”