WCF服务器和非.NET客户端

时间:2017-01-05 14:17:57

标签: java c# wcf

我有一个WCF项目,包括:

WCF Server
WCF Client
WCF Class Library

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

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

如果您的Java客户端引用了Web服务,会发生什么?当然这是反对互操作性的吗?

Q1)如果您拥有Java客户端会发生什么?它如何接受Person对象?

Q2)为什么Web服务返回自定义类型而不是JSON / XML?如果它返回JSON / XML,那么客户端可以以任何方式去除它吗?

旧版Web服务(.asmx)也是如此。幸运的是,我过去开发的所有Web服务仅供.NET客户端使用,因此我不需要考虑这一点。但是,这个问题一直都在我的脑海里。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

您还可以将WCF转换为公开REST API,这在目前非常普遍。

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