2011-04-12 39 views
0

我已經生成了基於此wsdl的wsdl上運行svcutil的代理類。用string []替換XmlQualifiedName []的屬性類型?

我不得不對Web服務進行一些修改才能工作。例如,我必須將所有類型爲double []的屬性數據類型替換爲string []。

現在我的問題是:

它是好(仍然有效)修改我生成的代理文件,並用繩子[]更換物業類型XmlQualifiedName []的?

我想這樣做的原因是因爲:

  • 響應XML看起來。更好/更清潔 當我使用字符串
  • 使用XMLQualifiedName的響應XML在冒號上執行一些不需要的「x003A」編碼。使用字符串[]

    ... 
        <Filter_Capabilities xmlns="http://www.opengis.net/ogc"> 
          <Spatial_Capabilities> 
           <GeometryOperands> 
            <q1:GeometryOperand xmlns:q1="http://www.opengis.net/ogc" xmlns="">gml_x003A_Point</q1:GeometryOperand> 
            <q2:GeometryOperand xmlns:q2="http://www.opengis.net/ogc" xmlns="">gml_x003A_LineString</q2:GeometryOperand> 
            <q3:GeometryOperand xmlns:q3="http://www.opengis.net/ogc" xmlns="">gml_x003A_Polygon</q3:GeometryOperand> 
           </GeometryOperands> 
    ... 
    

    迴應示例:使用XmlQualifiedName []

示例響應

... 
<Filter_Capabilities xmlns="http://www.opengis.net/ogc"> 
    <Spatial_Capabilities> 
     <GeometryOperands> 
      <GeometryOperand>gml:Point</GeometryOperand> 
      <GeometryOperand>gml:LineString</GeometryOperand> 
      <GeometryOperand>gml:Polygon</GeometryOperand> 
     </GeometryOperands> 
... 

回答

0

歸根結底,這是確定爲您但是你喜歡更改代理。您的更改的有效性最終取決於客戶端服務是否按照您希望他們在所有情況下使用執行以及修改的代理服務器。

我看到一些可能出現的問題與此變化,但是:

  • 如果您使用的這些類型的不僅僅是XML更多 - 比如,如果你使用它們JSON發送到服務 - - 該服務將拋出異常。這對於XmlQualifiedName /字符串方案不是問題(因爲WCF的JSON反序列化程序在這兩種情況下都需要常規的JSON樣式的字符串)。然而,這是雙/字符串方案中的一個問題(因爲WCF的JSON反序列化程序期望雙精度JSON數字,但字符串JSON字符串)。

  • 如果您使用這些相同的類型將XML請求或響應發送回服務,則即使在XML/SOAP方案中,它們也可能會在服務端拋出錯誤。更危險的是,他們可能會在服務端填充不正確或空的數據(例如,空字符串,歸零號碼,不完整的XML限定名稱等)。如果你開始用基元來做類似的魔法,在多態場景中這將是特別危險的。

希望這有助於!