Adobe AIR和Web服务呼叫。错误#1085错误:元素类型“br”必须以匹配结束标记“”
终止。这里是我的简单代码,如果从php或任何其他客户端调用,那么它工作正常,然后adobe air。同样的代码也适用于从SWF调用,也有用于项目其他部分的氟FX代码,但是它没有做任何事情来打破这一点。Adobe 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页
- 所有HTTP GET请求被剥离头下面的调用。它不在Flex堆栈中,因此它可能是底层的Flash播放器运行时。
- 所有具有“application/x-www-form-url-encoded”以外的内容类型的HTTP GET请求都变成POST请求
- 所有没有实际发布数据的HTTP POST请求都变成GET请求。请参阅1和2/
- 所有HTTP PUT和HTTP DELETE请求都转换为POST请求。这似乎是Flash播放器坚持使用的浏览器限制。
我确实看到上面的请求变成了GET,但是我确实有post值。或者如果这些不是由Web服务对象发送或记录的?
我终于自己找到了答案。事实证明,我将cookie设置为AutoDetect。这意味着AIR会调用一个URL,并且它需要重定向以将cookie/session值保存在URI本身中。
现在我切换到UseCookies,一切恢复正常。我可以从一个示例Web服务来测试它,并意识到服务器端做错了。从AIR到Browser,这是cookie的唯一区别。
不知何故,nusoap for PHP很聪明,知道有可用的Web服务的AutoDetect或New URI。但是AIR找不到。反正感谢大家帮我解决这个问题。
这很简单... Flex XML解析器使用严格的xml检查,因此所有的标签都必须关闭。如果您可以更改网络服务,则将所有<br>
标签更改为<br />
。
该方法假设调用只返回true/false的web方法,而不是返回整个web方法描述页面。因此我从AIR调用该方法的方式感觉错了。我能做些什么来解决这个问题吗? – 2012-01-08 09:10:00
是wsdl重定向到说明页面的常规浏览器请求吗? – 2012-01-08 09:33:15
不,常规要求一切正常。它也可以从php soap调用中正常工作。 – 2012-01-09 04:24:07
有趣的是,我发现所有的调用都转向GET,而不是将它们作为POST调用发送。有没有办法强制它对Web方法进行POST调用? – 2012-01-09 05:06:22
你在哪里指定你想从webservice调用webmethod'Authenticate'?试试这个.http://www.giantflyingsaucer.com/blog/?p = 26 – naveen 2012-01-09 05:38:12
我想,ws.Authenticate会这样做。而且它并不仅限于这种方法。所有方法都失败。具有相同的错误。 – 2012-01-09 06:15:23