编程环境是: - Windows 8桌面; - WCF服务; - Excel 2013办公应用; - 在同一台机器上运行的WCF服务和Excel office应用程序; - 办公室应用程序对WCF服务进行ajax调用; 发生问题的javascript代码(在办公室应用中使用)是:
function F() {
$.support.cors = true;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://localhost:5000/<service>/<method>",
data: '{<my data>}',
dataType: "json",
success: ...
error: ...
});
}
这是我遇到的问题 - 当我从Excel 2013应用程序调用WCF服务时,我收到“无传输”错误。我能够识别以下用例: 1)仅当我运行独立的Excel 2013实例并从“插入”Excel菜单插入应用程序时才会发生这种情况。 2)如果我从VS2012运行应用程序,那么一切都很好,我可以毫无问题地调用WCF服务。 (顺便说一句,WCF服务在同一台机器上运行。我从Excel 2013应用程序发出的请求是一个ajax服务。)。 3)与(2)相同的情况。该应用程序可以进行WCF调用。然后我还从Excel“插入”菜单中插入我的应用程序的实例。在这种情况下,如果我尝试使用插入的app实例进行WCF调用,我会得到与(1)中相同的错误 - “no transport”。
我在互联网上进行了一些搜索,发现我的问题可能与我尝试进行的呼叫是跨域调用有关。 (顺便说一下,我调试了jQuery代码,调用实际上是跨域代码)。建议的解决方案是在调用之前设置一个jQuery属性:“jQuery.support.cors = true;”。我在Excel 2013应用程序代码中执行了此操作,但问题仍未解决。然后我用jQuery代码跟踪调用,发现:
1)当从VS2012运行应用程序时,jQuery会创建两个传输对象:(1)一个用于跨域请求,(2)只有通过XMLHttpRequest允许跨域请求的传输对象。 当从应用程序进行WCF调用时,jQuery使用第二个传输并且调用成功。
2)当从Excel 2013“插入”菜单插入应用程序时,在WCF调用之前,jQuery仅为跨域请求创建一个传输对象。然后jQuery“决定”不可能使用该传输对象,并且请求失败并且“no transport”错误。
知道为什么会发生这种问题以及如何解决问题?