WCF服务失败,方法不允许

pet*_*ter 5 wcf jquery

我有一个JSON WCF服务,我写了一些javascript来访问这样的服务,

function stuffClick2() {
        $.ajax({
            url: "http://192.168.54.98/JsonWCFService/Service1.svc/Post",
            type: "POST",
            contentType: "application/json",
            data: '{"x":"1","y":"2","message":"The answer is: "}',
            dataType: "html",
            success: function(data) { $('body').html(data); }     
        });
    }
Run Code Online (Sandbox Code Playgroud)

我写了一个HTML页面,里面有上面的javascript.HTML页面使用IIS提供.

当我在PC上使用chrome访问HTML页面时,我看到这些操作按此顺序发送到WCF JSON服务,

OPTIONS /JsonWCFService/Service1.svc/Post HTTP/1.1
POST /JsonWCFService/Service1.svc/Post HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

OPTIONS以前失败了,但我让OPTIONS调用返回这个标题然后使它工作,

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

但我上面定义的回调不起作用,

success: function(data) { $('body').html(data); } 
Run Code Online (Sandbox Code Playgroud)

我知道WCF服务已经返回了这样的东西,

<b> The answer is 3 </b>
Run Code Online (Sandbox Code Playgroud)

但是当调用回调时,data的值是一个空字符串.

当我在不同的浏览器(IE)中运行html页面时,它只会导致POST调用,而不是OPTIONS调用,那么它可以工作.我注意到IE警告我它存在安全隐患,并询问我是否要继续.

Des*_*sus 6

当我尝试使用WCF为我正在制作的移动HTML应用程序实现CORS时,我遇到了这个问题.OPTIONS是一个预检请求,用于在调用方法之前查看方法是否可用.

这将是你的问题:

  1. 我认为,OPTIONS默认关闭OPTIONS.这可能是一个起点:http://www-jo.se/f.pfleger/cors-and-iis
  2. OPTIONS动词将使其成为您实际的POST方法,因此您需要在WCF中将某些内容过滤OPTIONS到具有相同返回类型且无效的另一个方法.并将POST动词过滤为您的实际方法.如果你不这样做,你会发现你的方法被调用两次的奇怪行为,或者它会抛出一个webservice模糊的异常.

我不确定您是否使用CORS,但主体将是相同的,因为它发送OPTIONS请求然后发送POST请求.