首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将通用数据类型的请求从FlashBuilder4发送到wcf服务

将通用数据类型的请求从FlashBuilder4发送到wcf服务
EN

Stack Overflow用户
提问于 2011-03-02 08:29:15
回答 2查看 438关注 0票数 1

我在服务器上设置了一个wcf服务,它为使用Flashbuilder4构建的flex项目提供数据。我使用了webservice内省特性来生成DTO和服务代理。其中一个DTO具有类型对象的属性。此泛型对象的内容将根据特定条件而有所不同,但始终是另一个复杂对象。在FB4中创建和填充vo非常顺利,但是当对象被序列化时,如下所示:

代码语言:javascript
复制
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<SOAP-ENV:Body> 
<tns:GetC xmlns:tns="EP2ProblemDemo1"> 
<tns:anyObj> 
<tns:Property1>yo!</tns:Property1> 
<tns:Property2>yo! yo!</tns:Property2> 
</tns:anyObj> 
</tns:GetC> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope>

您可能会注意到,尽管引用了类型为anyObj的对象,但ClassB属性缺少任何类型的信息:

代码语言:javascript
复制
public class ClassA
{
    public string Property1;
}
public class ClassB : ClassA
{
    public string Property2;
}

anyObj参数GetC缺少如下内容:

Xsi:type=“tns:B级”xmlns:tns="EP2ProblemDemo1“

这反过来会在wcf服务试图解码消息时产生错误。我认为服务是将anyObj的内容解释为不能隐式转换为基本对象的数组吗?

当将anyObj参数(类型对象)设置为ClassB实例时,类型信息似乎丢失了。这行为正确吗?我的印象是,即使您可以设置一个超类变量来引用它的一个子类,但是应该保留子类的类型信息,因此也应该包含在该对象的序列化表示中。

编辑,似乎FlashBuilder4序列化程序在发送回wcf服务时,从类型对象的属性中删除了具体的类型和命名空间信息,这样就无法反序列化看起来像数组的内容。此外,当在FB4中导入WSDL文件时,VO继承会丢失,因为它们最终会扩展EventDispatcher以便绑定。

解决方案我的解决方案是用AMF改变策略并转向远程处理,它在.NET中使用FluorineFXFluorineFX官方网站实现,它工作得很漂亮,并且由于数据作为字节数组被传输,因此具有较低的带宽消耗的好副作用。

我相信WebORBWebORB官方网站也可以用来在.net中实现AMF,但我还没有尝试过。

EN

回答 2

Stack Overflow用户

发布于 2011-03-02 10:25:07

你不能使用“任何”对象。您必须始终显式地描述允许哪些类型。检查KnownTypeAttributeServiceKnownTypeAttributeDataContractResolver (我还没有太多的经验)。如果您确实需要发送任意数据,并且无法预先定义所有可能的对象,则可以使用XElement。在xsd中,它将被描述为xsd:any。

票数 0
EN

Stack Overflow用户

发布于 2011-03-02 14:09:08

  1. 对于通过网络发送的所有对象类型,需要设置一个名为DataContract public class ClassA { public string Property1;}的属性。
  2. 与其使用基本类型(对象),不如使用baseclass并使用KnownType属性 ServiceContract(命名空间= "EP2ProblemDemo1")公共接口IService { OperationContract ClassC GetC(ClassD classB);} KnownType(typeof(ClassA)),KnownType(typeof(ClassB))公共类ClassD {}

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5165070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档