2011-04-12 56 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限定名称等)。如果你开始用基元来做类似的魔法,在多态场景中这将是特别危险的。

希望这有助于!