我尝试了同步和异步方法。我已经测试了许多线程中建议的所有不同的东西,但仍然,我不断得到上面的错误。
对于IE,我得到“ No transport ”并且在FF中看到一个可怕的“ Exception ...”失败“nsresult:”0x80004005(NS_ERROR_FAILURE)“。
当我从浏览器的URL行访问服务时,我会看到返回的文本,服务已启动并正在运行。 ( MyCloud.azurewebsites.net/MyService.svc/Ping )
但是当我尝试使用这个JS访问它时,它不起作用。
$.ajax({
cache: false,
async: false, //have tried true too
type: "GET",
url: "http://MyCloud.azurewebsites.net/MyService.svc/Ping",
datatype: "text",
success: function (response) { ... },
error: function (xhr, requestStatus, errorText) { ... }
});
我测试了不同的浏览器(Chrome除外)。由于CORS问题,我测试了对安全性(传输而不是 none )的某些更改声明了一个不同的端点。我仍然最终得到错误。寻找那些只会带来更多的困惑。
现在,我一直在争论这个问题超过一天,我决定构建故障排除。
<endpoint name="UrlEndPoint"
behaviorConfiguration="UrlEndPointBehavior"
address=""
binding="webHttpBinding"
contract="MyNamespace.IMyService"/>
<behavior name="UrlEndPointBehavior">
<webHttp helpEnabled="true"/>
</behavior>
[OperationContract]
[WebInvoke(UriTemplate = "Ping", Method = "GET")]
String Ping();
此刻我完全迷失,生病和疲惫。向正确的方向推进会很棒。
答案 0 :(得分:3)
这是一个跨站点脚本错误。您需要调用服务器端处理程序(代理)来处理对Azure环境的请求。所以,你的AJAX调用看起来更像是这样:
$.ajax({
type: "GET",
url: 'some/local/server-side/url/to/handle/the/call/to/"http://MyCloud.azurewebsites.net/MyService.svc/Ping",
datatype: "text",
success: function (response) { // handle response here from server-side proxy here },
error: function (xhr, requestStatus, errorText) { ... }
});
问题是由于浏览器中的XSS(跨站点脚本)限制,您无法调用外部域。这是您选择的浏览器实施的安全预防措施。