【问题标题】:Usage of custom data types on client and server wcf service在客户端和服务器 wcf 服务上使用自定义数据类型
【发布时间】:2013-01-08 12:59:47
【问题描述】:

我有一个自定义数据类型,我放入了类库 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();
     }
}

在客户端我有一个接口(所以我注入了实现)

using SharedTypes;

namespace WcfInterfaces
{
    public interface IDistrictManager
    {
        void CreateDistrict(District district);
        District GetDistrict(long id);
        List<District> GetDistricts();
    }
}

我终于有了客户应该使用的实现

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();
    }
}

但是问题出现了,这个实现需要使用它从服务参考中获得的 District 版本

WcfClientLibrary.SalesService.District

代替

SharedTypes.District

它们是一样的,但是 VS 不知道

所以我收到接口未正确实现的错误,因为我有 2 种不同类型的 District 类。

如何获取服务引用以使用 SharedTypes.District 代替?还是我的实现方式有问题?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    客户端项目中右键单击您的服务引用,然后选中“Reuse Types in Referenced Assemblies”。

    确保您已将SharedTypes.District 添加到您的客户服务参考项目中。

    【讨论】:

    • 我的做法好吗?还是有什么我应该重新考虑的?
    • 我认为你的实现还可以;但是没有必要将您的枚举转换为服务器端的列表......(虽然这根本不是问题)。
    • 那么 GetDistricts() 在客户端返回一个数组,所以我必须这样做,我猜序列化不适用于自定义类型的集合?
    • 好吧,我可以说是的;只要您不将它们标记为返回特定类型。您可以参考以下帖子:stackoverflow.com/questions/2525463/…
    • 我必须右键单击客户端项目中的服务引用并选择配置服务引用。一旦我打开它,它就已经被检查以重用引用程序集中的类型。我单击确定,然后它开始工作。真的很奇怪!
    【解决方案2】:

    在客户端添加 WCF 引用时。单击高级选项。 您可以指定一个设置来告诉它重用来自指定程序集的类型。 您将能够指定程序集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多