C# 在客户端和服务器wcf服务上使用自定义数据类型

C# 在客户端和服务器wcf服务上使用自定义数据类型,c#,wcf,C#,Wcf,我在类库SharedTypes中放入了一个自定义数据类型 namespace SharedTypes { public class District { public long Id { get; set; } public string Name { get; set; } } } 然后,我有一个WCF服务器与此服务 using System.ServiceModel; using SharedTypes; namespace WCF

我在类库SharedTypes中放入了一个自定义数据类型

namespace SharedTypes
{
    public class District
    {
        public long Id { get; set; }
        public string Name { get; set; }
    }
}
然后,我有一个WCF服务器与此服务

using System.ServiceModel;
using SharedTypes;

namespace WCF.WCFInterfaces
{
    [ServiceContract]
    public interface IWcfService
    {
        [OperationContract]
        District GetDistrict(long id);

        [OperationContract]
        void CreateDistrict(District district);

        [OperationContract]
        List<District> GetDistricts();
     }
}
而不是

SharedTypes.District
他们是一样的,但是他们不知道

因此,我得到了接口未正确实现的错误,因为我有两种不同类型的District类


如何获取服务引用以使用SharedTypes.District?或者,这是我的实现方式吗?

右键单击客户端项目中的服务参考,然后选中“在引用的程序集中重用类型”


在客户端添加WCF参考时,请确保已将
共享类型.District
添加到您的客户服务参考项目中。

。单击高级选项。 您可以指定一个设置,告诉它重用指定程序集中的类型。
您可以指定程序集。

我这样做可以吗?还是有些事情我需要重新考虑?我认为你的实施是可以的;但是没有必要将枚举表转换为服务器端的列表。。。(虽然这根本不是问题)。GetDistricts()在客户端返回一个数组,所以我必须这样做,我猜序列化对自定义类型的集合不起作用?嗯,我可能会说是的;只要不将它们标记为返回特定类型。您可以参考以下帖子:我必须右键单击客户端项目中的服务引用,然后选择配置服务引用。一旦我打开它,它就已经被检查以重用引用程序集中的类型。我点击ok,然后它开始工作。真奇怪!
public class DistrictManager : IDistrictManager
{
    private readonly WcfServiceClient _salesService;
    public DistrictManager()
    {
        _salesService = new WcfServiceClient();
    }

    public void CreateDistrict(District district)
    {
        _salesService.CreateDistrictAsync(district);
    }

    public District GetDistrict(long id)
    {
        return _salesService.GetDistrict(id);
    }

    public List<District> GetDistricts()
    {
        var list = _salesService.GetDistricts();
        return list.ToList();
    }
}
WcfClientLibrary.SalesService.District
SharedTypes.District