【问题标题】:Can I use a Single WCF method to return a class from multiple classes?我可以使用单个 WCF 方法从多个类返回一个类吗?
【发布时间】:2015-07-31 12:56:32
【问题描述】:

我在 c# 上有这个模型类

public class Enumerator
{
int ID {get;set;}
string Description {get;set;}
}

我还有近 20 个类实现了将它们转换为 Enumerator 类的方法。

我的问题很简单: 有没有办法在 WCF 服务上编写一个方法让客户端选择要枚举的类?返回的类型始终是 Enumerator 类。还是我必须写 20 个操作合同,每个班级一个?这似乎不太合乎逻辑。

此数据主要用于填充客户端的 ComboBox。

【问题讨论】:

  • 使用WebOperationContext.Current.CreateTextResponse可以返回System.ServiceModel.Channels.Message(也就是说,你将手动进行序列化)
  • 谢谢@EZI。我不确定我是否跟随你。如果知道返回的类型,为什么还需要手动序列化?你能详细说明一下吗?
  • ercpap.您将返回 Message 而不是真正的课程。 (顺便说一句:您也可以返回 Stream。将所有返回值(对象的序列化形式)填充到 MemoryStream 并返回,)

标签: c# wcf contract


【解决方案1】:

如果我以正确的方式理解您,您希望在 WCF 中执行一个操作,该操作将实现某些 IEnumerate(例如)的任何类型转换为 Enumerate 对象。如果是真的这里是一个代码

[DataContract]
[KnownType(typeof(Enumerate1))]
[KnownType(typeof(Enumerate2))]
[KnownType(typeof(EnumerateN))]
// up yo 20
public interface IEnumerate 
{
    [DataMember]
    string Description{ get; set; }
    [DataMember]
    int ID {get; set;}
    //  whatever you need 
}

[ServiceContract]
public interface IService
{
    [OperationContract]
    Enumerator GetEnumerator(IEnumerate obj);
}

public Service: IService
{
      Enumerator GetEnumerator(IEnumerate obj)
      {
         // convert
      }
}

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 2013-04-30
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2011-09-27
    • 2021-01-08
    相关资源
    最近更新 更多