Adobe AIR & Web Service Call. Ошибки с ошибкой # 1085: тип элемента "br" должен заканчиваться соответствующим конечным тегом "</br>" - PullRequest
0 голосов
/ 08 января 2012

Вот мой простой код, который отлично работает, если вызывается из php или любого другого клиента, а не Adobe Air.Тот же код также работает от вызова из SWF, есть код FluineFX для другой части проекта, но тогда он ничего не делает, чтобы это сломать.

Я нахожу одну вещь, что все вызовы POST почему-то меняются на GET, что меня действительно поражает.Я был бы так рад получить ответ на этот вопрос.Заранее всем спасибо.Ниже приведен практически такой же код из моего веб-сервиса.с кодом 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 Player.
  2. Все запросы HTTP GET с типом содержимого, отличным от «application / x-www-form-url-encoded», превращаются в запросы POST
  3. Все запросы HTTP POST, у которых нет фактически опубликованных данных, превращаются в запросы GET.См. 1 / и 2 /
  4. Все запросы HTTP PUT и HTTP DELETE превращаются в запросы POST.Похоже, что это ограничение браузера, из-за которого проигрыватель Flash застрял.

Я вижу, что мой запрос выше превращается в GET, но тогда у меня действительно есть значения post.ИЛИ, если они каким-то образом не отправлены или не записаны объектом веб-службы?

Ответы [ 2 ]

0 голосов
/ 09 января 2012

Я наконец нашел ответ сам. Оказывается, у меня установлены файлы cookie для AutoDetect Это означало, что AIR будет вызывать URL, и ему нужно будет перенаправить, чтобы сохранить значение cookie / сеанса в стороне от самого URI.

Теперь я переключился на UseCookies, и все вернулось на круги своя. Я мог проверить это на примере веб-сервисов и понял, что на стороне сервера что-то не так. И от AIR до браузера это единственное отличие файлов cookie.

Каким-то образом nusoap для PHP разумно знать, что есть AutoDetect или New URI доступных веб-сервисов. Но AIR не смог найти это. В любом случае, спасибо всем за помощь в решении этой проблемы.

0 голосов
/ 08 января 2012

Это довольно просто ... Flex XML-парсер использует строгую проверку XML, поэтому все теги должны быть закрыты.Если вы можете изменить веб-службу, измените все теги <br> на <br />.

...