例如,我在 IIS 中托管了两个服务。
[ServiceContract]
public interface IDeviceService
{
[OperationContract]
DeviceCollection GetAllDevices(Customer customer);
}
[ServiceContract]
public interface IUserService
{
[OperationContract]
User Authenticate(string username, string password);
}
UserService 中的 Authenticate 操作返回的 User 对象和 DeviceService 中 GetAllDevices 操作返回的 DeviceCollection 都具有 Customer 的子对象定义。 Customer 是一个业务对象,与 User 和 Device 对象在同一个程序集中。
我的问题出在客户端 - 当我调用设备操作时
userProxy.GetAllDevices(user.Customer);
编译器提示以下消息:
参数 1 - 无法从 UserService.Customer 转换为 DeviceService.Customer
我可以很好地连接到这两个服务,问题是 Customer 的对象定义。我真的不想将操作放在同一个服务中,因为它们似乎自然地存在于自己的服务中。我想我要问的是其他程序员如何处理这样的问题?
干杯,
斯图尔特
最佳答案
如果要跨多个服务共享数据协定,则必须将有问题的数据协定编译成其自己的程序集,然后将该程序集分发给客户端。
尽管类型看起来相同,但它实际上是两种不同的类型,这就是为什么您会看到您所看到的错误。您唯一的其他选择(除了单独的共享程序集)是将两个服务合并为一个,以便它们可以共享数据协定。
关于wcf - 具有不同契约(Contract)但业务对象相同的两个 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033238/