2012-01-08 8 views
0

ここで私の簡単なコードです。同じコードはSWFからの呼び出しでも動作しますが、プロジェクトの他の部分にもフッ素フッ素コードがありますが、これを破るために何もしません。Adob​​e AIR&Webサービスコール。エラー#1085のエラー:エレメントタイプ "br"は、一致する終了タグ "</br>"で終わらなければなりません。

すべてのPOSTコールが何とかGETに変更されていることがわかりました。これは本当に私を驚かせるものです。私はこれの答えを得ることがとてもうれしいです。みんなに感謝します。以下は、私のWebサービスとほぼ同じコードです。そのすぐ下に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 */ 
} 

以下のように

[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コードから私のコールこの男はhttp://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html

  1. すべてのHTTP GETリクエストがヘッダを剥奪されているページで、次を教えてくれる。これはFlexスタックにはないので、恐らくFlash Playerの基本ランタイムです。
  2. 「application/x-www-form-url-encoded」以外のすべてのHTTP GET要求はPOST要求に変換されます。
  3. 実際の投稿データがないすべてのHTTP POST要求はGET要求に変換されます。 1/2を参照/
  4. HTTP PUT要求とHTTP DELETE要求はすべてPOST要求に変換されます。これは、Flash Playerが立ち往生しているブラウザの制限のようです。

上記のリクエストはGETに変わりますが、その中に値を投稿しています。または、それらが何らかの形でWebサービスオブジェクトによって送信または記録されない場合はどうなりますか?

+0

興味深いことに、すべての呼び出しがPOST呼び出しとして送信される代わりに、GETに変わることがわかりました。 WebメソッドのPOST呼び出しを強制する方法はありますか? –

+0

webserviceからwebmethod 'Authenticate'を呼び出すことを指定していますか?これを試してみてください.http://www.giantflyingsaucer.com/blog/?p = 26 – naveen

+0

私は、この呼び出しをws.Authenticateと考えています。そして、この方法だけに特化したものではありません。すべてのメソッドが失敗します。同じエラーが発生しました。 –

答えて

0

私はついに自分自身で答えを見つけました。 AutoDetectにCookieが設定されていたことが判明しました。つまり、AIRはURLを呼び出し、リダイレクトしてCookie /セッション値をURI自体に保持する必要があります。

私はUseCookiesに切り替えました。すべてが正常に戻っています。私はサンプルのWebサービスからこれをテストし、それが間違ったことをしていたサーバー側であることに気が付いた。唯一のクッキーの違いであるAIRからブラウザへ。

どうやらPHP用のnusoapは、利用可能なWebサービスのAutoDetectまたは新しいURIがあることを知っていることは賢明です。しかし、AIRはそれを見つけることができませんでした。とにかくこれを解決するのを手伝ってくれてありがとう。

0

これはかなり簡単です... Flex XMLパーサは厳密なXMLチェックを使用しているため、すべてのタグを閉じる必要があります。 Webサービスを変更できる場合は、<br>タグをすべて<br />に変更してください。

+0

このメソッドは、代わりにtrue/falseを返すWebメソッドを呼び出すと仮定しています。代わりに、Webメソッドの説明ページ全体を返します。したがって、メソッドがAIRから呼び出される方法が間違っていると感じます。私はその問題を解決できる何かがありますか? –

+0

wsdlへの通常のブラウザ要求は説明ページにリダイレクトされていますか? –

+0

いいえ、通常のリクエストは正常に機能します。それはまた、PHPの石鹸呼び出しから正常に動作します。 –

関連する問題