我最近遇到這個問題。要解決它,我用了XmlSerializer
,並移除了XmlElement
屬性明確的排序:
set proxy_tool="C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SvcUtil.exe" /nologo /t:code /ser:XmlSerializer /UseSerializerForFaults
set sed_tool="$(ProjectDir)sed.exe" -r -i "s/,?[[:space:]]*Order=[[:digit:]]+//"
%proxy_tool% /o:"Proxy1.cs" /n:*,Namespaces.Name1 "Proxy1.wsdl"
%sed_tool% "Proxy1.cs"
%proxy_tool% /o:"Proxy2.cs" /n:*,Namespaces.Name2 "Proxy2.wsdl"
%sed_tool% "Proxy2.cs"
...
有一些more information on my blog post。
如果你想知道爲什麼秩序的問題,這是因爲在XSD一個sequence
有一個定義的順序,和網絡服務合同與XSD定義。
從the specification:
該定義的結果是,在一個實例,其類型被聲明爲校舍地址出現(例如在SHIPTO PO.xml而)任何元件必須由五個元素和一個屬性。這些元素必須被稱爲名稱,街道,城市,州和郵政編碼,由聲明的名稱屬性的值指定,並且元素必須以聲明它們的相同順序(順序)出現。
哇......這太複雜了。但謝謝你的答案。我結束了嘗試DataContractSerializer,它對我更好。 – Schultz9999 2012-03-23 16:41:14
有沒有辦法可以在DataContract中使用「xs:all」定義?那麼順序無關緊要? – Nicholi 2012-04-10 18:02:49
@Nicholi也許你可以控制WSDL – 2012-04-11 07:06:06