结果中的.NET Web服务客户端属性为null

本文关键字:客户端 属性 null 服务 Web NET 结果 | 更新日期: 2023-09-27 18:25:41

在c#控制台应用程序中似乎成功地使用了web服务后,对返回对象的检查显示属性都为null!

在大量搜索答案之后,我已经将问题归结为SOAP XML中的命名空间问题——使用fiddler,我稍微修改过的SOAP响应看起来是这样的:

  <?xml version="1.0" encoding="utf-8"?>
  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
      <MyResponse xmlns="http://foo.com">
        <FIRST_NM xmlns="">Michael</FIRST_NM>
      </MyResponse>
    </soapenv:Body>
  </soapenv:Envelope>

我添加的唯一部分是:

FIRST_NMxmlns=">Michael。。。(粗体部分)用小提琴演奏。

有一次,我在调试过程中作为一个中间人做了这件事——瞧!第一次在我的客户端应用程序中向我显示了"Michael"的FIRST_NM值。我决定尝试这个,因为我注意到从我的客户发出的请求具有这样的属性,而响应没有。

好的,所以诊断完成了。我正转向让它发挥作用的步骤。假设我无法控制服务器端的事务,我尝试打开Reference.cs文件并进行一些更改,例如更改以下内容:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
 public string FIRST_NM {
   get {
     return this.fIRST_NMField;
   }
   set {
     this.fIRST_NMField = value;
     this.RaisePropertyChanged("FIRST_NM");
   }
 }

到此:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Namespace="http://foo.com", Order=3)]
public string FIRST_NM {
...

我添加了Namespace="http://foo.com",到XmlElementAttribute。我的想法是,如果没有xmlns=",命名空间"http://foo.com"是从父代"MyResponse"标签继承的,我会得到一个匹配项。

然而,这并没有奏效。如果你们能为我指明方向,我们将不胜感激。

结果中的.NET Web服务客户端属性为null

我能够通过从.NET生成的代码中完全删除以下行来解决问题:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]

我想,由于名称空间是从父标记继承的,所以它实际上是"合格的"而不是"不合格的"。删除导致默认的Form行为None(根据文档)。

感谢社区——我在很大程度上是根据我在相关SO问题中找到的建议找到的。