2012-01-08 99 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

相关问题