代码之家  ›  专栏  ›  技术社区  ›  Jamie Chapman

具有多个服务和命名空间问题的WCF

  •  3
  • Jamie Chapman  · 技术社区  · 15 年前

    我已经创建了许多WCF服务,为了参数起见,它们被调用 Service 1 Service 2 .

    两个服务都返回(在某个时刻,可能通过对象内部的关系) 顾客 对象。

    为了测试起见,我添加了 获取客户机() 方法向Service1和Service2以及我添加了对基本WinForms应用程序中两个服务的服务引用。

    service1client proxy1=new service1client();

    客户1=proxy1.getCustomer();//

    ^^^^^^引用不明确,要求我将其命名为wftestclient.service1.customer

    service2client proxy2=new service2client();

    客户客户2=proxy2.getCustomer();

    ^^^^^引用不明确,要求我将其命名为wftestclient.service2.customer

    问题是,返回的客户对象 服务1 Service 2 两者都是 相同的 客户类型(wftestservice.customer)。为了解决这个问题,我需要包含完整的程序集名称,而不仅仅是客户。

    我读过一些关于堆栈溢出的文章,指出可以将数据契约编译成一个单独的程序集,但我并不特别喜欢这个想法,因为它可能仍然会导致客户端使用其他语言,如Java的问题。

    我看到的另一个解决方案是svcutil.exe方法,但根据我所看到的,这个解决方案没有解决我的命名空间问题,因为我需要为每个服务单独运行util?

    如果有人有任何有用的建议,请联系!

    1 回复  |  直到 15 年前
        1
  •  4
  •   blowdart    15 年前

    两个服务都返回一个客户对象(在某个时刻,可能通过对象内部的关系)。

    这就是你错的地方。wcf不返回对象,rest不返回对象,soap不返回对象。他们都通过了 信息 .

    现在,当您添加对Web服务的引用时,Visual Studio很高兴地为这些消息创建了一个包装类,将其内容作为属性公开,仅此而已。因为您要添加两个服务,这些包装类彼此不了解,因此您最终得到两个名称空间和两个包装类。

    是的,正如您所说,您可以将消息类移动到单独的程序集,链接该程序集并避免添加引用,然后将其作为适当的对象,但在后台,它的消息将被传递、序列化并反序列化到该共享对象中。停止考虑对象传递,开始考虑消息,你会发现你要么被两个包装器对象卡住,要么你需要链接一个外部程序集。