2013-01-02 117 views
0

团队A创建WebServiceA。它将使用Person类型。当在WebServiceA中通过调用注册人员时,还必须通知其他系统(通过调用由Team B通过注册人员创建的WebServiceB)。如何共享Web服务之间的类型

然后,当在系统B中编辑人时,修改必须迁移到系统A(通过调用WebServiceA传递修改后的人)。

问题是如何使WebServices使用相同的类型? 我们可以将xml作为字符串发送,然后将其序列化或反序列化为每个WebService端的对象,以便我们不必使用xml,但我很好奇它是否更容易。

我想有这样的:

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person) 
WebMethod - PersonModified(Person person) 

WebSericeB 
WebMethod - PersonRegistered(Person person) 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person) 

,而不是这个

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person.SerializeToXml()) 
WebMethod - PersonModified(string person) - deserialize to WebServiceA.Person 

WebSericeB 
WebMethod - PersonRegistered(string person) - deserialize to WebServiceB.Person 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person.SerializeToXml()) 

我们在A队使用ASP.NET Web Service与B队是用Java。 如果两个团队都使用.NET,它会改变什么吗?

回答

1

如果两个团队都使用.NET,则可以在一个类库项目中定义数据对象,并且两个团队将共享相同的库(DLL)。这几乎是Windows Communication Foundation在.NET项目中创建对服务的引用时在幕后执行的操作。因此,它可以很简单地将对象作为参数传递,就像在第一个示例中一样。

既然你有两种语言,你肯定需要共同点,那就是json或xml到位的地方(这是你的第二个例子)。你可以添加一些类型的转换器类,它们将捕获一个字符串,返回你的对象并将其作为参数传递给你的方法,实现取决于你正在使用的框架(Spring使这很容易)

+0

如果我们使用web服务而不是wcf服务?有没有办法在.NET中编写的两个Web服务之间共享对象?我认为你在答案中犯了一个小错误。我在第一个例子中传递对象,而不是第二个例子。在第二次我传递字符串。 –

+0

@Peri您仍然可以创建代理类(使用“Web引用”)。请参阅http://msdn.microsoft.com/en-us/library/d9w023sx(v=vs.90).aspx。我相信WCF是Web服务的推荐方式,虽然(顺便说一句,我纠正我的参考您的例子)。 – Ulises

+0

是的,我知道我可以创建代理类:)但是,当您添加Web引用时,即使WebServiceB引用了与WebService相同的类库,此类库中的类型也会与代理一起重新生成并位于不同的名称空间中。因此,如果WebServiceB在WebServiceA中具有方法PersonRegistered(ClassLibrary.Person person),它将作为PersonRegistered(WebService2.Person person)可见。 –