鑑於以下架構在模式中聲明的元素是否允許xml:lang作爲xs:string?
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://tempuri.org/foo"
elementFormDefault="qualified">
<xs:element name="foo" type="xs:string" />
</xs:schema>
是下面的XML是否有效?
<foo xmlns="http://tempuri.org/foo" xml:lang="en-US">test</foo>
也就是說,這裏是否允許「xml:lang」屬性?
此問題的原因是配置爲通過HTTP使用SOAP/1.1(WCF條款中的basicHttpBinding)的WCF(Windows Communication Foundation)端點始終在「faultstring」元素上包含「xml:lang」屬性被提出。根據SOAP/1.1包絡模式,該元素是簡單類型「xs:string」。
我不會真的在乎它是否不是針對客戶我們的問題是反序列化這些故障。我已經向微軟報告這是一個potential bug,但得到了迴應,認爲這是設計並且符合SOAP/1.1。閱讀XML Schema規範讓我相信微軟是錯誤的,並且簡單類型的元素不允許任何屬性。
我在這裏丟失了與「xml:」命名空間中屬性相關的內容嗎?
我真正想要的是某種「官方」定義,它允許我向微軟說「你錯了」,或者「你有一個錯誤的WS堆棧」給我們的客戶,而不會讓自己變傻。
編輯:標題問題的答案似乎是「否」,如下所述。我的WCF問題的解決方案也變得非常簡單。將空字符串作爲System.ServiceModel.FaultReasonText的構造函數中的xmlLang參數傳遞,並且不會添加屬性。傳遞null不起作用(ArgumentNullException)並且一個參數構造函數也不起作用(系統默認語言將設置爲xml:lang)
感謝您的後續解決方法(FaultReasonText構造函數)。 – 2014-08-26 14:13:51