WCF服务如何跨平台?

时间:2015-04-14 13:23:46

标签: .net web-services wcf service soa

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

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

这怎么可能?你如何与WCF服务交谈,例如  Java的?你只是发送SOAP文本?或者您是否接触过某些Java对象?或其他什么?

2 个答案:

答案 0 :(得分:2)

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

  

Web服务都是关于XML的:

     
      
  1. Web服务由XML格式的文档描述,使用称为WSDL(Web服务描述语言)的XML语言。这个   根据操作,消息和方式描述服务   它包含的绑定,并可能提供服务的URL   可能会被召唤。
  2.   
  3. 使用XML Schema(XSD)描述消息的结构,XSD包含在WSDL中或由WSDL引用
  4.   
  5. 发送到Web服务和从Web服务接收的消息都是符合模式的XML形式,并且遵循   WSDL描述的协议,使用称为SOAP的XML协议   (对于简单对象访问协议)
  6.   

自从我撰写该帖子以来,JSON(JavaScript Object Notation)已成为与Web服务进行数据交换的另一种流行格式。通常,使用JSON的服务不使用等效的WSDL或XSD,但其他想法是相同的。

最重要的是你的研究误导了你。 WCF不发送和接收.NET对象。 WCF发送和接收XML(或者可能是JSON)。另一方也发送XML或JSON。 "其他方面"并不重要。正在使用。

答案 1 :(得分:0)

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

当你返回一个.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状态标题和正文。当你处理复杂/合成的对象时,它也会变得更加复杂,但基本的想法仍然是相同的:将它们分解为一些你可以轻松便携地通过线路发送的东西,由客户重组。