2010-04-12 75 views
2

我有一个WCF Web服务(使用basicHTTPBinding),我正在从Flex应用程序连接到这个Web服务。我正在使用FlexBuilder代码生成器为Web服务创建代理。从Flex调用无参数WCF方法时发生IsEmpty错误

直到我试图在没有参数的Web服务上调用方法时,这一直很好。这是它的界面声明:

[OperationContract] 
    DateTime GetCurrentDateTime(); 

然后我开始从服务获取HTTP 500代码响应。

检查与小提琴手的HTTP响应表明,WCF是报告以下错误:

Error in deserializing body of request message for operation 'GetCurrentDateTime'. 
The OperationFormatter could not deserialize any information from the Message because the Message is empty (IsEmpty = true) 

如此看来,有一些没有PARAMATERS Flex和WCF焕调用方法之间的不相容性 - Flex不包括消息中的任何内容,但WCF期望有东西在那里。

有什么办法来配置Flex或WCF来解决这个问题,还是我将不得不在这些操作合同中包含虚拟参数?

回答

0

我可以调用一个没有参数的web请求就好了。

WCF:

[ServiceContract] 
public interface ICurrentDateTimeService 
{ 
    [OperationContract] 
    DateTime GetCurrentDate(); 
} 

public class Service1 : ICurrentDateTimeService 
{ 
    public DateTime GetCurrentDate() 
    { 
     return DateTime.Now; 
    } 
} 

软硬度:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="init()"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     import services.currentdatetimeservice.CurrentDateTimeService; 

     private var service:CurrentDateTimeService = new CurrentDateTimeService(); 

     public function init():void { 
      service.addEventListener(ResultEvent.RESULT, serviceResult); 
      service.addEventListener(FaultEvent.FAULT, serviceFault); 
      service.GetCurrentDate(); 
     } 

     public function serviceResult(e:ResultEvent):void { 
      trace(e.result); 
     } 

     public function serviceFault(e:FaultEvent):void { 
      trace("Oh no! :("); 
     } 

    ]]> 
</fx:Script> 
</s:Application> 

结果Thu Aug 4 01:11:12 GMT-0600 2011

你有故障事件监听器?