结果中的.NET webservice客户端null属性

时间:2012-02-25 03:08:01

标签: c# web-services soap asmx

在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_NM xmlns =“”&gt; Michael ...(粗体部分)使用fiddler。

一旦我在调试会话期间以中间人的身份做到这一点 - 瞧!第一次在我的客户端应用程序中向我显示了“迈克尔”的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”标签,我会得到一个匹配。

然而,这不起作用。你们都可以指出我的任何方向都将非常感激。

1 个答案:

答案 0 :(得分:1)

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

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

我想,因为命名空间是从父标记继承的,所以它实际上是“合格的”而不是“不合格”。删除导致默认的表单行为,无(按照文档)。

感谢社区 - 我认为这主要基于我在相关SO问题中找到的建议。