【问题标题】:WCF Server and Non .NET ClientWCF 服务器和非 .NET 客户端
【发布时间】:2017-01-05 23:20:08
【问题描述】:

我有一个 WCF 项目,其中包括:

WCF Server
WCF Client
WCF Class Library

类库由服务器和客户端共享,并包含一个 Person 对象。因此客户端可以这样做:

public Person XMLToPerson()
{
    ServiceReference1.Service1Client s1 = new ServiceReference1.Service1Client();
    Person p = s1.GetPerson();
    return p;
}

如果您有一个引用 Web 服务的 Java 客户端会发生什么?这肯定违反互操作性吗?

Q1) 如果您有 Java 客户端会怎样?它如何接受 Person 对象?

Q2) 为什么 Web 服务返回自定义类型而不是 JSON/XML?如果它返回 JSON/XML,那么客户端可以按照它想要的任何方式对其进行消毒?

这与旧版 Web 服务 (.asmx) 相同。幸运的是,我过去开发的所有 Web 服务都仅供 .NET 客户端使用,因此我无需考虑这一点。然而,这个问题一直萦绕在我的脑海中。

【问题讨论】:

  • 我在下面给了你一个答案,但是这个问题对于 WCF 的工作原理以及它为什么存在如此重要,我认为你可以从花一些时间了解 WCF 教程、书籍或视频。必须有数百种可供选择。

标签: java c# wcf


【解决方案1】:

如果您使用的是 BasicHttpBinding,那么在服务器和客户端之间发送的是 SOAP XML,而不是对象。您会在 .net 中看到自定义类型,因为 .net 为您提供了一个很好的框架,可以抽象出所有 XML。这在 WCF 中很重要,因为 WCF 也可用于通过更改或添加配置(而不是通过重写代码)来处理其他格式和协议。 ASMX 也使用 SOAP,但它没有 WCF 的灵活性。

您可能会在不同平台上遇到与 SOAP 的不同实现不兼容的问题,但我没有经常看到这种情况。

【讨论】:

  • 谢谢。但是,我认为这不能回答我的任何一个问题。
  • 您是在问如何使用 Java 中的 SOAP 吗?
【解决方案2】:

WCF 以 SOAP 格式交换信息,因此它与其他语言具有高度的互操作性。 Java 客户端可以是 Apache CXF 来生成包装类,例如,

http://adventuresinsoftware.com/blog/?p=481

您还可以将 WCF 转换为暴露 REST API,这在目前很常见。

专门回答你的问题。当您使用 VS 生成服务引用时,SOAP 到对象的转换由生成的包装类自动处理(Apache CXF 对 Java 客户端执行相同的操作)。您确实应该查看生成的类以了解如何操作。可能你也知道为什么没有人真正想要接触原始 SOAP 数据,因为 XML 太冗长,你不想自己浪费时间。

【讨论】:

  • 谢谢。如果您动态创建通道(而不是添加服务引用),那么这是否意味着直接返回 SOAP,即框架不会为您将 SOAP 反序列化为对象?
  • @w0051977 没有人这样做,但是从技术上讲,如果您以原始方式连接,您可以直接看到 SOAP 消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多