2013-01-02 120 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)可見。 –