Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery WCF服务失败,不允许使用方法_Jquery_Wcf - Fatal编程技术网

Jquery WCF服务失败,不允许使用方法

Jquery WCF服务失败,不允许使用方法,jquery,wcf,Jquery,Wcf,我有一个JSON WCF服务,我编写了一些javascript来访问这样的服务 function stuffClick2() { $.ajax({ url: "http://192.168.54.98/JsonWCFService/Service1.svc/Post", type: "POST", contentType: "application/json", data: '{"x"

我有一个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); }     
        });
    }
<b> The answer is 3 </b>
我已经编写了一个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
选项之前失败了,但我让选项调用返回此标题,然后使其工作

Access-Control-Allow-Origin: *
但是我上面定义的回调不起作用

success: function(data) { $('body').html(data); } 
我知道WCF服务返回了类似的内容

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); }     
        });
    }
<b> The answer is 3 </b>
答案是3 但是当调用回调时,数据的值是一个空字符串


当我在另一个浏览器(IE)中运行html页面时,它只会导致POST调用,而不会导致选项调用,然后它就会工作。我注意到IE警告我它会带来安全风险,并询问我是否要继续。

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

以下是您的问题:

  • 我认为,IIS默认关闭了选项。一个可能的起点是:
  • OPTIONS动词将用于实际的POST方法,因此您希望在WCF filter OPTIONS中有一些内容用于另一个具有相同返回类型但不执行任何操作的方法。并根据实际方法过滤POST动词。如果您不这样做,您将发现您的方法被调用两次或抛出webservice模糊异常的奇怪行为

  • 我不确定您是否在使用CORS,但委托人将是相同的,因为它先发送选项请求,然后发送POST请求。

    谢谢您的回答让我找到了解决问题的方法

    当我使用ajax javascript访问HTML页面时

    http://localhost/file.html
    
    但是如果你看一下它访问WCF服务时使用的javascript

    http://192.168.54.98/JsonWCFService/Service1.svc/Post
    
    如果我两者都做的话

    http://mymachinename.domain.com/JsonWCFService/Service1.svc/Post
    http://mymachinename.domain.com/file.html
    
    然后它就可以工作,而不必调用选项操作


    这并不能解释为什么一个选项和一个来自chrome的帖子不起作用。Chrome似乎忽略了结果。

    你说得对,但这很奇怪,因为今天早些时候它对我起了作用。好的,我已经让选项工作起来了(通过在应用程序_BeginRequest方法中添加一些代码来返回选项请求的标题)。因此post随后发生,但是我从XMLHttpRequest得到一个错误-不允许使用origin null。因此,它在文章中使用的标题似乎是“Origin:null”,我可以在fiddler中看到它。这是为什么呢?如果我看一下有效的post操作,没有指定原点标头。这就解释了它为什么会起作用。我认为这与我使用jquery的方式有关,我正在访问html文件,包括chrome中的jqueryfile://C:/Users/petermc/workspace/HelloPhoneGap/assets/www/index.html“我将尝试使用IIS提供它。好的,它现在工作得更好,至少在IE中,如果我在IIS中提供jquery html页面。无论如何,这似乎不是我的问题,因为我只是使用浏览器进行测试。实际应用程序将位于使用PhoneGap编译的android应用程序中,这将使其成为一个本地应用程序,从而改变这种特定行为。