这个人救了我的一天。
我将在这里放置他的一些笔记,以防那个网页某天消失。
(我讨厌找到“你的答案就在这里”的链接,然后链接已经失效。)
http://blogs.microsoft.co.il/blogs/idof/archive/2011/07.aspx
<behaviors>
<endpointBehaviors>
<behavior name="webSupport">
<webHttp />
<CorsSupport />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="CorsSupport" type="WebHttpCors.CorsSupportBehaviorElement, WebHttpCors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<services>
<service name="Service.JSonService">
<endpoint address="http://localhost:8080" behaviorConfiguration="webSupport” binding="webHttpBinding" contract="Service.IJSonService" />
</service>
</services>
现在,您需要找到他的可下载库文件,名为“WebHttpCors.dll”。
但以上内容足以帮助您通过谷歌/必应搜索解决问题。
在我的情况下,让我感到困惑的是IE可以工作,但Firefox无法工作。
我的起始页面是:
http://localhost:53692/test/WCFCallTestViaJQ14.htm
我的服务地址是:
http://localhost:8002/MyWCFService/MyWCFMethodByWebGet?state=NC&city=Raleigh
所以我有本地主机<<-->>本地主机的流量。
**** 但端口不同。(53692和8002)****
IE可以正常使用。Firefox不能正常使用。
然后你要记住每个浏览器在处理其.Send()请求时都有不同的方式(在JQUERY内部)。
现在一切都讲得通了。
if (window.XMLHttpRequest) {
returnObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
returnObject = new ActiveXObject("Microsoft.XMLHTTP");
} else {
msg = "Your browser doesn't support AJAX!";
}
以下是我一直在谷歌/必应搜索的一些关键词和短语,最终让我找到了一些有用信息。
Result: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.statusText]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://localhost:53692/test/WCFCallTestViaJQ14.htm :: HandleJQueryError :: line 326" data: no]
XMLHttpRequest Send "NS_ERROR_FAILURE"
JQuery Ajax WCF Self Hosted CORS JSON
现在,你需要阅读他的博客来理解代码正在做什么:
例如,他说:
“Access-Control-Allow-Origin”头部的值为“*”
这可能是你想要的,也可能不是。 你可能希望更好地控制这个值(头部)和其他值(方法和来源)。
开发环境是一回事。(使用所有的*符号)
生产环境则不同,你可能希望将这些*值调整为更具有辨别力的值。简而言之,你需要理解CORS在安全方面实际上为你做了什么,而不是添加一个让所有东西都能进入的行为。
allowed-origins: '*'
allowed-headers: '*'
allowed-methods: '*'