Visual Studio WCF客户端创建具有缺少属性的类,而是添加ExtensionData属性

时间:2013-06-12 15:17:47

标签: visual-studio-2010 wcf wcf-proxy

我有一个WCFService,它以这种方式返回各种类型的数据:

[DataContract( Name="Amazing", NameSpace="http://schemas.myorganisation.com/DataContract1")]
Public class AmazingDto
{
    [DataMember( Order=0, IsRequired=true )]
    public string Name { get; set; }

    [DataMember( Order=0, IsRequired=true )]
    public bool IsAmazing { get; set; }

}

然后

[DataContract ( Name="GetAmazingListResponse", NameSpace="http://schemas.myorganisation.com/DataContract1")]
Public class GetAmazingListResponseDto
{
     [DataMember(Order=0, IsRequired-true, EmitDefaultValue=False)]
     public ICollection<AmazingDto> AmazingList{ get; set; }
}

另外

[DataContract(Name = "Response", Namespace = "http://schemas.myorganisation.com/DataContract1")]
public class ResponseDto<TData> : BaseResponseDto
{
    public ResponseDto();

    [DataMember(Order = 0, IsRequired = true)]
    public StatusDto Status { get; set; }

    [DataMember(Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public TData Data { get; set; }
}

然后

public ResponseDto<GetAmazingListResponseDto> GetAmazingList()
{
      var response = new ResponseDto<GetAmazingListDto>
       {
            Status = new StatusDto { StatusResult = StatusResultEnum.Success },
            Data = new GetAmazingListResponseDto
                 {
                     AmazingList = new List<AmazingDto>
                      {
                           new AmazingDto { Name="Ponies", IsAmazing=true },
                           new AmazingDto { Name="Glenatron", IsAmazing=false }
                       }
                 }
       };
       return response;
}

现在,当我使用像SoapUI这样的工具调用该服务时,我得到了我可能期望的完全响应。

  <GetAmazingListResult xmlns:a="http://schemas.myorganisation.com/DataContract1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Status>
           <a:StatusResult>Success</a:StatusResult>
        </a:Status>
        <a:Data xmlns:b="http://schemas.myorganisation.com/DataContract1">
           <b:AmazingList>
              <b:Amazing>
                 <b:Name>Ponies</b:Name>
                 <b:IsAmazing>true</b:IsAmazing>
              </b:Amazing>
              <b:Amazing>
                 <b:Name>Glenatron</b:Name>
                 <b:IsAmazing>false</b:IsAmazing>
              </b:Amazing>
           </b:AmazingList>
        </a:Data>
     </GetAmazingListResult>

但是,当我使用Visual Studio 2010创建服务引用并进行如下调用时:

var client= new FindoutAmazingnessServiceClient();
var response = client.GetAmazingList();

我发现response只有两个属性,StatusExtensionData。我已经在其他SE问题中看到了这一点,但答案总是在数据契约上缺少 DataContract DataMember 。我肯定有那些,所以必须发生其他事情,以便VS.Net看不到我的课程。我尝试引用包含这些文件的DTO库,并尝试配置与该库匹配类型的引用,但它没有区别。

我哪里错了?

2 个答案:

答案 0 :(得分:1)

只需将[DataMember]添加到您的数据成员即可。它解决了我的问题。

答案 1 :(得分:0)

我找到的解决方案是,当我正在使用自己的WCF服务时,将接口导入我的客户端,然后使用ChannelFactory来建立连接。这在我的场景中非常有效,但是没有解决我在这个问题上提出的问题。