【问题标题】:How can WCF services be cross platform?WCF 服务如何跨平台?
【发布时间】:2015-06-20 03:12:47
【问题描述】:

直到最近,我还认为 WCF 服务只是 .NET(即只能从 .NET 应用程序访问),因为它们公开了一个 .NET 对象,消费者在该对象上调用方法(然后当然在服务器上运行) .

然后我读到 WCF 服务是跨平台的;即,可从各种平台访问,而不仅仅是 .NET。

这怎么可能?您如何与 WCF 服务进行对话,例如 爪哇?您只是发送 SOAP 文本吗?或者您是否接触过一些 Java 对象?还是别的什么?

【问题讨论】:

  • WCF 是跨平台的,因为它是 Web 服务的 .NET 实现(主要是 SOAP,但也可以执行 REST)。这与说 Java 中的 Web 服务是跨平台的没什么不同。 Web 服务背后的整个概念是它们与平台无关 - 只要客户端知道如何与服务交互,客户端就不必是相同的系统(甚至相同的编程语言)。
  • WCF 会话等 WCF 功能是否跨平台?他们是否遵循任何标准,例如 WS-RM 或 WS*。

标签: .net web-services wcf service soa


【解决方案1】:

来自我的旧博文“Basics: How Web Services Work”:

Web 服务都是关于 XML 的:

  1. Web 服务由 XML 格式的文档描述,使用称为 WSDL(Web 服务描述语言)的 XML 语言。这 从操作、消息和 它包含的绑定,并且可能提供服务所在的 URL 可能会被调用。
  2. 使用 XML 模式 (XSD) 描述消息的结构,该模式包含在 WSDL 中或由 WSDL 引用
  3. 从 Web 服务发送和接收的消息均采用符合架构的 XML 格式,并且遵循 由 WSDL 描述的协议,使用称为 SOAP 的 XML 协议 (对于简单对象访问协议)

自从我写那篇文章以来,JSON(JavaScript 对象表示法)已成为与 Web 服务进行数据交换的另一种流行格式。通常,使用 JSON 的服务不使用等效的 WSDL 或 XSD,但其他想法是相同的。

底线是您的研究误导了您。 WCF 不发送和接收 .NET 对象。 WCF 发送和接收 XML(或者可能是 JSON)。对方也发送 XML 或 JSON。 “另一方”使用什么平台并不重要。

【讨论】:

    【解决方案2】:

    这可以通过序列化来实现。

    当您返回一个 .NET 对象时,它会被序列化(通常为 XML 或 JSON,但也可能有其他可能性)。如果 .NET 客户端正在接收消息,它会将其反序列化回 .NET 对象。例如:

    class MyObject
    {
        int blah;
        string blah2;
    }
    
    ...
    
    return new MyObject() { blah = 0; blah2 = "asdf" };
    

    可能会被序列化为:

    <ns0:MyOjbect xmlns:ns0="tempuri.org">
      <blah>0</blah>
      <blah2>asdf</blah2>
    </ns0:MyObject>
    

    在 XML 中,或

    { 
      MyOjbect {
        "blah":0,"blah2":"asdf" 
      }
    }
    

    在 JSON 中

    然后被客户端反序列化回MyObject类。其他客户端也可以对自己的数据类型进行这种反序列化 - 或者直接使用 XML 或 JSON。

    这里还有更多内容,具体取决于您使用的是基于SOAP 还是REST 的服务;对于SOAP,序列化周围会有一个SOAP 信封,对于REST,会有一些HTTP 状态标题和正文。当您处理复杂/组合的对象时,它也会变得更加复杂,但基本思想保持不变:将它们分解成您可以轻松便携地通过网络发送以由客户端重新构建的东西。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多