在WCF客户端

时间:2017-05-01 20:32:41

标签: c# asp.net wcf

我为SOAP服务创建了一个WCF客户端,其架构中包含以下类型:

<xs:element name="foo" nillable="true">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="bar" type="xs:string"/>
    </xs:sequence>
    <xs:anyAttribute namespace="##other"/>
  </xs:complexType>
</xs:element>

.NET生成以下类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1098.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://example.com/ws/entity")]
public partial class foo : object {

  private string barField;

  private System.Xml.XmlAttribute[] anyAttrField;

  [System.Xml.Serialization.XmlElementAttribute(Order=0)]
  public string bar {
    get { return this.barField; }
    set { this.barField = value; }
  }

  [System.Xml.Serialization.XmlAnyAttributeAttribute()]
  public System.Xml.XmlAttribute[] AnyAttr {
    get { return this.anyAttrField; }
    set { this.anyAttrField = value; }
  }
}

在此类上填充AnyAttr属性的推荐方法是什么?我可以找到创建XmlAttribute的唯一方法来自现有的XmlDocument,在这种情况下不会创建,直到对象在出路时序列化为止。

我开始尝试在BeforeSendRequest中的IClientMessageInspector中添加一个属性,但我找到修改原始XmlDocument的唯一方法是创建一个Message,转换它,然后替换原始消息,这似乎只是为了添加属性而做了很多工作。

最终,我尝试创建看起来像这样的XML:

...
  <foo xmlns:ns2="http://example.com/ws/ext" ns2:other="some other value">
    <bar>some value</bar>
  </foo>
...

1 个答案:

答案 0 :(得分:0)

我拥有定义Foo的服务,虽然我无法修改Foo本身,但我可以将自定义元素添加到架构中。因此,我没有尝试使用模式中的现有xs:anyAttribute,而是为我的数据添加了一个新元素。