我有一个WCF Web服务(使用basicHTTPBinding),我从Flex应用程序连接到该服务。我正在使用FlexBuilder代码生成代理Web服务。
在我尝试在没有参数的Web服务上调用方法之前,这一直很有效。这是它的界面声明:
[OperationContract]
DateTime GetCurrentDateTime();
然后我开始从服务中获取HTTP 500代码响应。
使用Fiddler检查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)
因此,似乎Flex和WCF之间存在不兼容性,因为调用没有参数的方法 - Flex不会在消息中包含任何内容,但是WCF期望有一些东西存在。
有没有办法配置Flex或WCF来解决这个问题,或者我是否必须在此类操作合同中包含虚拟参数?
答案 0 :(得分: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
你有错误事件的听众吗?