【问题标题】:WCF - Object as known type -> interoperable?WCF - 已知类型的对象 - >可互操作?
【发布时间】:2011-05-12 15:05:58
【问题描述】:

其实这个问题应该有一个直截了当的答案(关于下面的“对象”属性):

具有以下数据合同:

    [KnownType(typeof(bool))]
    [KnownType(typeof(int))]
    [KnownType(typeof(string))]
    [KnownType(typeof(Customer))]
    [KnownType(typeof(Client))]
    public class Transaction
    {    
        // properties
        [DataMember(Name = "UID")]
        public int UID{}

        [DataMember(Name = "Type")]
        public Enums.TransactionType Type{}

        [DataMember(Name = "Data")]
        public Object Data{}
    }

以及以下服务合同:

public interface IService
{
      [OperationContract(Name = "GetData")]
      List<Transaction> GetTransact();
}

这可以互操作吗?从Java说,gSoap?如果没有,我怎样才能使它具有互操作性?

谢谢。

编辑: 我只想知道 WCF 是否知道如何将 Object 从/到定义的已知类型序列化/反序列化。

【问题讨论】:

    标签: c# wcf object interop known-types


    【解决方案1】:

    只要客户端可以从 WSDL 正确生成类型就可以了。例如,根据客户端,它可能会将 C# 的 List&lt;Transaction&gt; 更改为 Transaction[] 或相当等价的东西。您还需要选择正确的装订类型。通常 basicHttpBinding 的互操作性效果最好。

    【讨论】:

    • 是的,这很清楚......但我只想知道 WCF 是否知道如何使用定义的已知类型从 Object 序列化/反序列化。
    • 添加为 [KnownType] 的内容是为了告诉序列化程序有关它们的信息,并将它们添加到 WSDL。如果序列化程序得到一个对象,那么是的,它会扫描 KnownTypes 以寻找适合的对象。通常,这与继承有关。
    • 另外,抱歉,我第一次看到这个时没有注意到您的一个数据成员的类型是Object。在这种情况下,只要实际实例的类型为 CustomerClient,我希望 WCF 能够很好地处理 Object Data 字段。在序列化时它会从实例类型中知道,在反序列化时它会从 SOAP 消息中传递的类型名称中知道。
    • 非常感谢您的回答...我会开始努力的。一旦它起作用,我会接受你的回答:)顺便说一句,当我看到 MS“WCF 测试客户端”应用程序由于返回“对象”而向我的函数报告错误时,我开始了这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2010-10-03
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多