【问题标题】:Primitive types as parameters using message contract WCF使用消息契约 WCF 将原始类型作为参数
【发布时间】:2017-10-03 01:45:07
【问题描述】:

我正在制作 WCF 服务,并且存在一个将与该服务进行通信的客户端,并且该客户端希望响应采用给定格式。

这就是我使用 MessageContract 的原因。但是,客户端将原始类型作为参数。

有没有办法让我的服务使用 MessageContract 接受原始类型作为参数?

这是我创建的合约的代码。

[ServiceContract]
[XmlSerializerFormat]
public interface IService
{
    [OperationContract]
    contentListResult getContentList();
}

//SVC 
public contentListResult getContentList()
{  
   //Implementation
}

//Classes

[MessageContract(IsWrapped = false)]
public class contentListResult
{
   [MessageBodyMember]
   public contentList contentList { get; set; }
}

[MessageContract(IsWrapped = false)]
public class contentList
{
   //Some properties
}

这一切都有效,但是当我尝试将参数放入服务(int Id,字符串 foo)时,它会刹车,因为当使用消息契约时,参数显然需要是对象。

有没有办法解决这个问题?

【问题讨论】:

  • 这里的原始类型到底是什么?你能展示一下你设计的Messagecontract的代码吗?
  • 我用代码更新了问题,谢谢。
  • 你试过用 knowntype 属性装饰吗?
  • 不,我不熟悉,我会查一下。
  • 好的,只是为了确保我们在同一页面上,我需要能够像 client.getContentList(int, string, string) 这样调用服务。我不明白使用已知类型进行装饰有什么帮助。

标签: .net wcf soap


【解决方案1】:

用 knowntype 装饰内容列表。

 [KnownType(typeof(contentList))] 
 [MessageContract(IsWrapped = false)]
    public class contentListResult
    {
       [MessageBodyMember]
       public contentList contentList { get; set; }
    }

    public class contentList
    {
       //Some properties
    }

【讨论】:

    【解决方案2】:

    好的,我正在寻找一种能够在服务中获取参数的解决方法。

    解决方法是声明一个对象并用 [MessageContract] 装饰它,并用 [MessageHeader] 装饰属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2013-08-03
      • 2011-03-13
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多