两个具有不同合同但业务对象相同的WCF服务

Sim*_*ian 6 wcf wcf-client

例如,我在IIS中托管了两个服务.

[ServiceContract]
public interface IDeviceService
{
    [OperationContract]
    DeviceCollection GetAllDevices(Customer customer);

}

[ServiceContract]
public interface IUserService
{
    [OperationContract]
    User Authenticate(string username, string password);

}
Run Code Online (Sandbox Code Playgroud)

从UserService中的Authenticate操作返回的User对象和从DeviceService中的GetAllDevices操作返回的DeviceCollection都具有Customer的子对象定义.Customer是一个业务对象与User和Device对象在同一个程序集中.

我的问题出在客户端 - 当我调用设备操作时

userProxy.GetAllDevices(user.Customer);
Run Code Online (Sandbox Code Playgroud)

编译器抱怨以下消息:

参数1 - 无法从UserService.Customer转换为DeviceService.Customer

我可以很好地连接到两个服务,这是Customer的对象定义就是问题.我真的不想把操作放在他们看似在自己的服务中自然生活的相同服务中.我想我要问的是,其他程序员如何处理这样的问题呢?

干杯,斯图尔特

And*_*are 3

如果您想在多个服务之间共享数据协定,那么您必须将相关数据协定编译为其自己的程序集,然后将该程序集分发给客户端。

尽管类型看起来相同,但实际上是两种不同的类型,这就是您看到错误的原因。您唯一的其他选择(除了单独的共享程序集之外)是将这两个服务合并为一个,以便它们可以共享数据协定。

  • 此外,当您添加服务引用时,您希望使用“高级”选项卡来指定应共享哪些类型。 (2认同)