2011-04-15 75 views
0

我們已經建立了一塊氟化一體化裝置,這是一個非常奇怪的問題。在一些IE版本中沒有提出氟申請

我們有一個表格上有Captcha; Captcha圖像由創新的.Net/AMF webservice填充,創造性地標題爲GetCaptchaImage.ashx,並且可以從Flash中的文本超鏈接重新加載。

在IE瀏覽器的一些版本(特別是IE8,但它也可能是其他),不論IE version emulationwmode,點擊文字鏈接導致HTTP調用我們的氟網關成功地進行,但調用web服務不遵循它。檢查HTTP交易與Microsoft Fiddler,我們看到:

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,所以我不明白爲什麼它不會只是血腥的工作™。實際方法調用讀取:

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唯一的其他出現時的line:

_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); 

其中collectArgs結束是一個Array o沒有提供任何線索的f論證。

編輯完

沒有人有任何想法,爲什麼在地球上是第二次通話不會做它的網絡服務器?我不明白爲什麼Flash不會發布HTTP GET,但同樣,我想不出爲什麼瀏覽器(更不用說這個瀏覽器)會抑制它的任何原因。我不是Flash開發人員(我在這裏運行.Net團隊),但是我看不出什麼奇怪的事情,而且我和Flash團隊(包括構建代碼的開發人員)都不會想到爲什麼會有這種可能正在發生。

任何想法的人?

+0

getTheCaptchaAgain方法是否被調用?該方法的代碼是什麼? (我對Signals沒有多少經驗,但是我明白這是一個事件分派的框架,所以實際http請求的代碼必須位於'getTheCaptchaAgain'或其他函數中)。 – 2011-04-15 15:30:18

+0

'getCaptchaAgain'是用戶單擊以重新加載Captcha的表單上的按鈕;我相信功能本身是由Fluorine框架來處理的,但是對網關的初始HTTP調用被調用,我們不明白爲什麼特定的web服務不會隨後被調用。 – 2011-04-15 15:40:20

+0

在我看來'getCaptchaAgain'是一個調度器,'getTheCaptchaAgain'是一個註冊到它的監聽器(根據這一行:'compForm.getCaptchaAgain.add(getTheCaptchaAgain);'。所以,流程似乎是:'_cantReadCaptchaButton 'getClicked,'getNewCaptcha'捕獲鼠標事件;'getCaptchaAgain.dispatch()'被調用,導致getCaptchaAgain通知它的監聽器,這可能是'getTheCaptchaAgain'。這就是爲什麼我提到'getTheCaptchaAgain'方法'getCaptchaAgain'對象)。再次,我對Floruine或Signals不熟悉,所以我可能是錯的。 – 2011-04-15 15:53:59

回答

0

畢竟,它看起來像是Flash中其他地方的問題,並且瀏覽器認爲處理器(/GetCaptchaImage.ashx)被認爲是未改變的。

所以我們解決了緩存設置的問題,而不是需要做其他事情。

感謝您的幫助,特別是Juan Pablo