这家伙救了我的命。
http://blogs.microsoft.co.il/blogs/idof/archive/2011/07.aspx 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”。
但上面的内容足以帮助您通过 google/bing 找到解决方案。
让我困惑的部分(在我的场景中)是 IE 可以工作,但 Firefox 不能工作。
我的原始页面是:
http://localhost:53692/test/WCFCallTestViaJQ14.htm
所以我的服务地点是:
http://localhost:8002/MyWCFService/MyWCFMethodByWebGet?state=NC&city=Raleigh
所以我有 localhost > localhost 流量。
**** 但端口不同。 (53692 和 8002)****
IE 没问题。 Firefox 对此不太满意。
然后你必须记住每个浏览器以不同的方式处理它们的 .Send() 请求(即在 JQUERY 内部)。
现在一切都说得通了。
//JavaScript snipplet from JQuery library
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: '*'