直到最近,我认为WCF服务只是.NET(即只能从.NET应用程序访问),因为它们公开了一个.NET对象,消费者在其上调用方法(然后当然在服务器上运行)
然后我读到WCF服务是跨平台的;即,可从各种平台访问,而不仅仅是.NET。
这怎么可能?你如何与WCF服务交谈,例如 Java的?你只是发送SOAP文本?或者您是否接触过某些Java对象?或其他什么?
答案 0 :(得分:2)
来自我的旧博文" Basics: How Web Services Work":
Web服务都是关于XML的:
- Web服务由XML格式的文档描述,使用称为WSDL(Web服务描述语言)的XML语言。这个 根据操作,消息和方式描述服务 它包含的绑定,并可能提供服务的URL 可能会被召唤。
- 使用XML Schema(XSD)描述消息的结构,XSD包含在WSDL中或由WSDL引用
- 发送到Web服务和从Web服务接收的消息都是符合模式的XML形式,并且遵循 WSDL描述的协议,使用称为SOAP的XML协议 (对于简单对象访问协议)
醇>
自从我撰写该帖子以来,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
状态标题和正文。当你处理复杂/合成的对象时,它也会变得更加复杂,但基本的想法仍然是相同的:将它们分解为一些你可以轻松便携地通过线路发送的东西,由客户重组。