0

我们构建的 Fluorine 集成有一个非常奇怪的问题。

我们有一个带有验证码的表格;Captcha 图像是从一个创造性地命名的 .Net/AMF 网络服务填充的,GetCaptchaImage.ashx并且可以从 Flash 中的文本超链接重新加载。

在某些版本的 IE(特别是 IE8,但也可能是其他版本)中,无论IE 版本 emulationwmode,单击文本链接会导致对我们的 Fluorine 网关的 HTTP 调用成功,但对 web 服务的调用不会跟着它。使用Microsoft Fiddler检查 HTTP 事务,我们看到:

POST http://www.domain.com/gateway.aspx
200 OK (application/x-amf)

没有别的,而在任何其他浏览器中我们看到:

POST http://www.domain.com/gateway.aspx
200 OK (application/x-amf)
GET http://www.domain.com/GetCaptchaImage.ashx
200 OK (image/gif)

进行调用的代码似乎是从 继承的,没有任何覆盖,org.osflash.signals.Signal.dispatch所以我不明白为什么它不会 Just Bloody Work™。实际的方法调用如下:

private function getNewCaptcha(event:MouseEvent):void
{
    getCaptchaAgain.dispatch();
    trace("Captcha button click");
    GlobalDebugger.log(this, "Captcha button click!");
}

getCaptchaAgain整个代码库中唯一提到的其他内容是:

public var getCaptchaAgain:Signal = new Signal();

compForm.getCaptchaAgain.add(getTheCaptchaAgain);

唯一的其他出现getNewCaptcha是该行:

_cantReadCaptchaButton.addEventListener(MouseEvent.CLICK, getNewCaptcha);

编辑: Juan Pablo Califano指出我没有注意到有对 的引用getTheCaptchaAgain,我将其误读为getCaptchaAgain. 它被定义为

private function getTheCaptchaAgain():void
{
    captchaSignal.dispatch();
}

并且只从 调用onFormResponse,它是无趣的。captchaSignal定义在

public class CompetitionFormMediator extends AbstractFactoryAccessorMediator
{
    [Inject]
    public var captchaSignal:CaptchaSignal;
    // ...
}

CaptchaSignal扩展org.osflash.signals.Signal并且无趣,但在一行中被调用:

signalCommandMap.mapSignalClass(CaptchaSignal, CaptchaCommand);

CaptchaCommand延伸SignalCommand并最终在内部flash.events.EventDispatcher调用

var callFunction:Function = serviceHub.call;
callFunction.apply(serviceHub, collectArgs);

wherecollectArgs是一个Array没有提供任何线索的论点。

结束编辑

有谁知道为什么第二个电话不会进入网络服务器?我不明白为什么 Flash 不会发出 HTTP GET,但同样,我想不出浏览器(更不用说这个浏览器)会抑制它的任何原因。我不是 Flash 开发人员(我在这里管理 .Net 团队),但我看不出有什么奇怪的地方,而且我和 Flash 团队(包括构建代码的开发人员)都想不出任何可能的原因正在发生。

有什么想法吗?

4

1 回答 1

0

毕竟,看起来这是 Flash 中其他地方的问题,并且/GetCaptchaImage.ashx浏览器认为有问题的处理程序 ( ) 未更改。

所以我们已经解决了缓存设置的问题,而不需要做很多其他事情。

感谢大家的帮助,尤其是胡安·巴勃罗

于 2011-04-18T11:59:57.417 回答