我正在開發WebService,並希望以簡單實用的方式讓所有人都可以使用它。對於其中一個訪問,我需要發送兩條信息,一個令牌和一個XML。模式/最佳做法參數WebService
在這種情況下,有人懷疑,我使用參數:String - String or String - XmlDocument?
那麼,換句話說,我的問題是,建議使用String參數是XML文檔嗎?你在這方面的經驗是什麼?
我正在開發WebService,並希望以簡單實用的方式讓所有人都可以使用它。對於其中一個訪問,我需要發送兩條信息,一個令牌和一個XML。模式/最佳做法參數WebService
在這種情況下,有人懷疑,我使用參數:String - String or String - XmlDocument?
那麼,換句話說,我的問題是,建議使用String參數是XML文檔嗎?你在這方面的經驗是什麼?
如果你希望你的服務可以被任何客戶端使用,那麼傳遞一個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接受其中的一個作爲參數,它會使用在世界上幾乎每一個客戶。
如果你將要發送的XML Web服務,那麼你或許應該公開爲一個XmlDocument,只是爲了確保人們在看服務定義理解需要傳遞什麼。
那據說,對於傳統的SOAP服務來說,將XML blob作爲參數通常被認爲是不好的,因爲它們不是自我描述的,版本化會變成一場噩夢(您需要支持您的服務曾經能夠使用的所有版本的XmlDocument ...所以如果你每年更換兩次,3年後你將有6種不同的XML文檔格式需要支持)。
在C#應用程序中,建議使用XmlDocument或XmlElement?我會進行一些測試,感謝您分享您的經驗和迴應。 – 2010-06-16 12:30:31
@Ph:你也可以使用XmlElement。當您使用XmlDocument時,將使用XmlElement。當你考慮它時,將XML文檔嵌套在另一個XML文檔中是沒有意義的。 – 2010-06-16 12:46:35
@John Saunders是的,我正在閱讀關於類的關係。我想到了這一點,爲什麼我用XmlDocument參數創建了一個Web方法,而當我使用它(引用)參數是XmlElement。謝謝。 – 2010-06-16 12:52:04
我一直使用字符串參數。 我認爲,但我不確定,序列化的xmldocument大於xml數據本身。 除此之外,我不認爲PHP應用程序可以調用需要XmlDocument的webservices。
-1:如果你不確定某件事情,那麼我建議你保留它,直到你確定。在這種情況下,你只是錯了。 – 2010-06-16 12:47:24
但是我的數據在一個結構體中,並且這個結構體沒有從Web服務中導入。在客戶端上,它創建一個新的對象,即ArraOfT [StructObject]。因此,許多控件都需要修改和處理信息。所以我想在兩端序列化對象。這將解決我的問題。所以我想序列化對象,發送一個字符串或XmlDocument,獲取它,然後再次序列化一個對象。 – 2010-06-16 13:03:38
@Ph:您的結構或其他類型從Web服務中「_never_」導入。它只是不這樣工作。請參閱[Web服務如何工作](http://johnwsaundersiii.spaces.live.com/blog/cns!600A2BE4A82EA0A6!523.entry)以瞭解您的結構永遠不會到達客戶端的原因。 – 2010-06-16 15:06:50