2012-01-08 56 views
0

終止。這裏是我的簡單代碼,如果從php或任何其他客戶端調用,那麼它工作正常,然後adobe air。同樣的代碼也適用於從SWF調用,也有用於項目其他部分的氟FX代碼,但是它沒有做任何事情來打破這一點。Adob​​e AIR和Web服務呼叫。錯誤#1085錯誤:元素類型「br」必須以匹配結束標記「</br>」

我確實發現了所有POST調用都以某種方式更改爲GET的一件事,這真讓我感到驚訝。我很樂意爲此得到答案。在此先感謝大家。以下是與我的Web服務幾乎相同的代碼。 AIR代碼就在它的下面。

[WebMethod(EnableSession = true)] 
public bool Authenticate(string UserName,string Password) 
{ 
    try 
    { 
     if (Membership.ValidateUser(UserName, Password)){ 
      FormsAuthentication.SetAuthCookie(UserName, true); 
      return true; 
     } 
     return false; 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
} 

我從Adobe AIR代碼如下

var ws:WebService = new WebService(); 
ws.wsdl="http://mysite.com/myservice.asmx?WSDL"; 
ws.useProxy=false; 
ws.addEventListener(LoadEvent.LOAD,onWSDLLoad); 
ws.loadWSDL(); 
ws.Authenticate.addEventListener(ResultEvent.RESULT,resultHandler); 
ws.Authenticate.addEventListener(FaultEvent.FAULT,onLoginFaultHandler); 
ws.Authenticate("usrname","password"); 

protected function onLoginFaultHandler(event:FaultEvent):void 
{ 
    Alert.show('Login Failed with messsage\r\n[ '+event.fault.faultString+' ]'); 
    /* Error #1085: The element type "br" must be terminated 
     by the matching end-tag "</br>". */ 
     /* checking the content value of fault event shows 
     same out put as http://mysite.com/myservice.asmx */ 
} 

protected function onLoginResultHandler(event:ResultEvent):void 
{ 
    /* on success code */ 
} 

這傢伙告訴我們http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html

  1. 所有HTTP GET請求被剝離頭下面的調用。它不在Flex堆棧中,因此它可能是底層的Flash播放器運行時。
  2. 所有具有「application/x-www-form-url-encoded」以外的內容類型的HTTP GET請求都變成POST請求
  3. 所有沒有實際發佈數據的HTTP POST請求都變成GET請求。請參閱1和2/
  4. 所有HTTP PUT和HTTP DELETE請求都轉換爲POST請求。這似乎是Flash播放器堅持使用的瀏覽器限制。

我確實看到上面的請求變成了GET,但是我確實有post值。或者如果這些不是由Web服務對象發送或記錄的?

+0

有趣的是,我發現所有的調用都轉向GET,而不是將它們作爲POST調用發送。有沒有辦法強制它對Web方法進行POST調用? – 2012-01-09 05:06:22

+0

你在哪裏指定你想從webservice調用webmethod'Authenticate'?試試這個.http://www.giantflyingsaucer.com/blog/?p = 26 – naveen 2012-01-09 05:38:12

+0

我想,ws.Authenticate會這樣做。而且它並不僅限於這種方法。所有方法都失敗。具有相同的錯誤。 – 2012-01-09 06:15:23

回答

0

我終於自己找到了答案。事實證明,我將cookie設置爲AutoDetect。這意味着AIR會調用一個URL,並且它需要重定向以將cookie/session值保存在URI本身中。

現在我切換到UseCookies,一切恢復正常。我可以從一個示例Web服務來測試它,並意識到服務器端做錯了。從AIR到Browser,這是cookie的唯一區別。

不知何故,nusoap for PHP很聰明,知道有可用的Web服務的AutoDetect或New URI。但是AIR找不到。反正感謝大家幫我解決這個問題。

0

這很簡單... Flex XML解析器使用嚴格的xml檢查,因此所有的標籤都必須關閉。如果您可以更改網絡服務,則將所有<br>標籤更改爲<br />

+0

該方法假設調用只返回true/false的web方法,而不是返回整個web方法描述頁面。因此我從AIR調用該方法的方式感覺錯了。我能做些什麼來解決這個問題嗎? – 2012-01-08 09:10:00

+0

是wsdl重定向到說明頁面的常規瀏覽器請求嗎? – 2012-01-08 09:33:15

+0

不,常規要求一切正常。它也可以從php soap調用中正常工作。 – 2012-01-09 04:24:07

相關問題