Jquery WCF服务失败,不允许使用方法
我有一个JSON WCF服务,我编写了一些javascript来访问这样的服务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"
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是一个飞行前请求,用于在调用某个方法之前查看该方法是否可用 以下是您的问题:
我不确定您是否在使用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应用程序中,这将使其成为一个本地应用程序,从而改变这种特定行为。