1

编程环境为: - Windows 8 桌面;- WCF 服务;- Excel 2013 办公应用程序;- WCF 服务和 Excel 办公应用程序在同一台机器上运行;- 办公应用程序对 WCF 服务进行 ajax 调用;出现问题的 javascript 代码(在 office 应用程序中使用)是:

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 的“插入”菜单中插入我的应用程序实例。在这种情况下,如果我尝试使用插入的应用程序实例进行 WCF 调用,则会收到与 (1) 中相同的错误 - “无传输”。

我在互联网上进行了一些搜索,发现我的问题可能与我尝试拨打的呼叫是跨域呼叫有关。(顺便说一句,我调试了 jQuery 代码,调用确实是跨域调用)。建议的解决方案是在调用之前设置 jQuery 属性之一:“jQuery.support.cors = true;”。我在我的 Excel 2013 应用程序代码中这样做了,但问题没有解决。然后我在 jQuery 代码中跟踪调用,发现:

1)当应用程序从 VS2012 运行时,jQuery 会创建两个传输对象:(1)一个用于跨域请求,(2)一个只允许通过 XMLHttpRequest 进行跨域请求。当从应用程序发出 WCF 调用时,jQuery 使用第二个传输并且调用成功。

2) 当应用程序从 Excel 2013 的“插入”菜单插入时,在 WCF 调用之前,jQuery 只为跨域请求创建一个传输对象。然后jQuery“决定”不可能使用该传输对象并且请求失败并出现“无传输”错误。

知道为什么会发生这种情况以及如何解决问题吗?

4

0 回答 0