2010-06-16 70 views
0

我正在開發WebService,並希望以簡單實用的方式讓所有人都可以使用它。對於其中一個訪問,我需要發送兩條信息,一個令牌和一個XML。模式/最佳做法參數WebService

在這種情況下,有人懷疑,我使用參數:String - String or String - XmlDocument?

那麼,換句話說,我的問題是,建議使用String參數是XML文檔嗎?你在這方面的經驗是什麼?

回答

1

如果你希望你的服務可以被任何客戶端使用,那麼傳遞一個XmlElement是不可行的。這不會向WSDL提供任何信息,客戶可以使用它來決定發送給您的內容。

而是傳遞一個簡單的「數據傳輸對象」類。這將是一個沒有行爲的簡單類,只有數據。例如:

public class PersonDTO 
{ 
    public int ID {get;set;} 
    public string Name {get;set;} 
    public List<AddressDTO> Addresses {get;set;} 
} 

public class AddressDTO 
{ 
    public string Line1 {get;set;} 
    public string City {get;set;} 
    public string PostalCode {get;set;} 
} 

有您的webmethod接受其中的一個作爲參數,它會使用在世界上幾乎每一個客戶。

+0

但是我的數據在一個結構體中,並且這個結構體沒有從Web服務中導入。在客戶端上,它創建一個新的對象,即ArraOfT [StructObject]。因此,許多控件都需要修改和處理信息。所以我想在兩端序列化對象。這將解決我的問題。所以我想序列化對象,發送一個字符串或XmlDocument,獲取它,然後再次序列化一個對象。 – 2010-06-16 13:03:38

+0

@Ph:您的結構或其他類型從Web服務中「_never_」導入。它只是不這樣工作。請參閱[Web服務如何工作](http://johnwsaundersiii.spaces.live.com/blog/cns!600A2BE4A82EA0A6!523.entry)以瞭解您的結構永遠不會到達客戶端的原因。 – 2010-06-16 15:06:50

1

如果你將要發送的XML Web服務,那麼你或許應該公開爲一個XmlDocument,只是爲了確保人們在看服務定義理解需要傳遞什麼。

那據說,對於傳統的SOAP服務來說,將XML blob作爲參數通常被認爲是不好的,因爲它們不是自我描述的,版本化會變成一場噩夢(您需要支持您的服務曾經能夠使用的所有版本的XmlDocument ...所以如果你每年更換兩次,3年後你將有6種不同的XML文檔格式需要支持)。

+0

在C#應用程序中,建議使用XmlDocument或XmlElement?我會進行一些測試,感謝您分享您的經驗和迴應。 – 2010-06-16 12:30:31

+1

@Ph:你也可以使用XmlElement。當您使用XmlDocument時,將使用XmlElement。當你考慮它時,將XML文檔嵌套在另一個XML文檔中是沒有意義的。 – 2010-06-16 12:46:35

+0

@John Saunders是的,我正在閱讀關於類的關係。我想到了這一點,爲什麼我用XmlDocument參數創建了一個Web方法,而當我使用它(引用)參數是XmlElement。謝謝。 – 2010-06-16 12:52:04

-1

我一直使用字符串參數。 我認爲,但我不確定,序列化的xmldocument大於xml數據本身。 除此之外,我不認爲PHP應用程序可以調用需要XmlDocument的webservices。

+0

-1:如果你不確定某件事情,那麼我建議你保留它,直到你確定。在這種情況下,你只是錯了。 – 2010-06-16 12:47:24