C# adobeair&;Web服务调用。带有错误的错误“1085:元素类型”;br";必须由匹配的结束标记“终止”</br>&引用;

C# adobeair&;Web服务调用。带有错误的错误“1085:元素类型”;br";必须由匹配的结束标记“终止”</br>&引用;,c#,web-services,soap,air,adobe,C#,Web Services,Soap,Air,Adobe,这是我的简单代码,如果从php或任何其他客户端调用,那么它可以很好地工作。同样的代码也适用于SWF的调用,项目的其他部分也有fluorineFX代码,但它并没有做任何事情来打破这一点 我确实发现了一件事,所有的POST电话都在以某种方式改变着,这让我非常惊讶。我很高兴得到这个问题的答案。提前谢谢大家。下面是我的web服务中几乎相同的代码。航空代码就在下面 [WebMethod(EnableSession = true)] public bool Authenticate(string UserN

这是我的简单代码,如果从php或任何其他客户端调用,那么它可以很好地工作。同样的代码也适用于SWF的调用,项目的其他部分也有fluorineFX代码,但它并没有做任何事情来打破这一点

我确实发现了一件事,所有的POST电话都在以某种方式改变着,这让我非常惊讶。我很高兴得到这个问题的答案。提前谢谢大家。下面是我的web服务中几乎相同的代码。航空代码就在下面

[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;
    }
}
我从AdobeAIR打电话的代码如下

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 */
}
var-ws:WebService=newwebservice();
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”、“密码”);
受保护的函数onLoginFaultHandler(事件:FaultEvent):无效
{
Alert.show('登录失败,消息为\r\n['+event.fault.faultString+']');
/*错误#1085:元素类型“br”必须终止
通过匹配的结束标记“
”*/ /*检查故障事件显示的内容值 输出与输出相同http://mysite.com/myservice.asmx */ } 受保护的函数onLoginResultHandler(事件:ResultEvent):void { /*论成功码*/ }

这家伙在第页告诉我们

  • 所有HTTP GET请求都会去掉头。它不在Flex堆栈中,所以它可能是底层Flash player运行时
  • 所有内容类型不是“application/x-www-form-url-encoded”的HTTP GET请求都将转换为POST请求
  • 所有没有实际发布数据的HTTP POST请求都将转换为GET请求。见1/2和2/
  • 所有HTTP PUT和HTTP DELETE请求都转换为POST请求。这似乎是Flash player一直存在的浏览器限制

  • 我确实看到上面的请求变成了GET,但我确实在其中包含了post值。或者,如果Web服务对象不发送或记录这些内容?

    这非常简单。。。FlexXML解析器使用严格的XML检查,因此必须关闭所有标记。如果您可以更改web服务,那么将所有

    标记更改为

    我终于自己找到了答案。原来我把cookies设置为自动检测。这意味着AIR将调用一个URL,它需要重定向以将cookie/session值保留在URI本身中

    现在我把它换成了饼干,一切都恢复正常了。我可以从一个示例web服务中测试这一点,并意识到是服务器端出了问题。从空中到浏览器,这是cookies的唯一区别


    不知何故,nusoapforphp知道有自动检测或新的Web服务URI可用是明智的。但空中无法找到它。无论如何,谢谢大家帮我解决这个问题

    假设该方法调用只返回true/false的web方法,而不是返回整个web方法描述页面。因此,我觉得从空中调用该方法的方式有问题。我能做些什么来解决这个问题吗?对wsdl的常规浏览器请求是否会重定向到描述页面?不,常规请求工作正常。通过php soap调用,它也可以很好地工作。有趣的是,我发现所有调用都被转换为GET,而不是作为POST调用发送。有没有办法强制它对Web方法进行POST调用?您在哪里指定要从Web服务调用webmethod
    Authenticate
    ?试试这个,我想ws.Authenticate会做这个调用。而且它不仅仅针对这种方法。所有方法都失败。同样的错误。