当前位置: 首页 > 知识库问答 >
问题:

从jQuery调用WCF:方法不允许

田博超
2023-03-14
[ServiceContract]
public interface ISmartyStreetsService
{
    [OperationContract]
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string AddressLookup(string learnersID, string street, string secondary, string city, string state, string zip);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SmartyStreetsService : ISmartyStreetsService
{
    public string AddressLookup(string street, string secondary, string city, string state, string zip)
    {
        //Lookup returns JSON of addresses, or string error.
        return Lookup(street, secondary, city, state, zip);
    }
}

我有一个Frankenstein web.config,它是我研究中不断编辑的牺牲品:

  <?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2"/>
    <customErrors mode="Off"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="SmartyStreetsWCF.SmartyStreetsService" behaviorConfiguration="serviceBehavior">
        <endpoint address=""
                  binding="webHttpBinding"
                  contract="SmartyStreetsWCF.ISmartyStreetsService"
                  behaviorConfiguration="web"></endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
        <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
        <add name="Access-Control-Max-Age" value="1728000" />
      </customHeaders>
    </httpProtocol>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

最后,我有一个非常简单的HTML文件,它使用Jquery来调用我的服务,托管在一个非本地web服务器上。

$.ajax({
        url: "http://wcftesting2.com/SmartyStreets.svc/AddressLookup",
        type: "GET",
        data: {street: "1 Rosedale St", secondary: "", city: "Baltimore", state:"MD", zip:"21229"},
        contentType: "application/json",
        dataType: "json",
        success: function(addresses) {
            alert("EUREKA!");
        },
        error: function(error) {
            alert("FAILURE");
        }
    });

试图从我的HTML页面运行jquery,我得到以下结果:preflight的响应具有无效的HTTP状态代码405

如果有人能帮我一丝一毫,那就太神奇了。

共有1个答案

澹台阳秋
2023-03-14

您必须删除contentType,因为您要在GET not Post中传递数据。

我参考以下链接。

关于堆栈溢出的jQuery ajax函数中contentType和dataType的差异

 类似资料:
  • 我的代码有点像这样:所以我想异步调用SendSms部分。我该怎么做?我可以简单地使用task.run Async和await吗?

  • 问题内容: 我有一个通过我的ASPX网站公开的WCF服务库,如下所示 在我的测试页中,我可以通过MS Ajax进行呼叫:- 效果很好,或通过jQuery $ .ajax调用:- 哪个不行-在FireBug下,我可以看到500 Internal Server Error消息,并且异常开始 当我明确告诉它不这样做时,为什么看起来jQuery调用正在传递XML(以及如何停止它,以便尽可能自然地处理来自所

  • 本文向大家介绍jQuery ajax调用WCF服务实例,包括了jQuery ajax调用WCF服务实例的使用技巧和注意事项,需要的朋友参考一下 恩,在由瘦客户端转换成胖浏览器端的“潮流”下,必然要使用JavaScript调用后台的各种服务。 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容。借用jQuery强大的库,使用JavaScript访问WCF服务非常简便。同事研究了一个b

  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的

  • 本文向大家介绍jQuery Ajax调用WCF服务详细教程,包括了jQuery Ajax调用WCF服务详细教程的使用技巧和注意事项,需要的朋友参考一下 这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013。 该后台需要支持通过json来传递和接收数据。 首先,说说搭建过程。 第一步:创建WCF服务应用程序项目