【问题标题】:What is the WCF C# equivalent of the following client XML?以下客户端 XML 的 WCF C# 等效项是什么?
【发布时间】:2016-08-18 12:23:44
【问题描述】:

我们有以下 XML 格式的 SOAP 请求,它被发送到我的 Web 服务。 我想将多次出现的“名字”解析为一个数组,但不一定。 不幸的是,我无法更改请求,只能更改 Web 服务。

以下客户端 XML 的 WCF C# 等效项是什么?

<foo:NameHent>
    <foo1:Date>1988-03-05</foo1:Date>
    <foo1:Firstname>John</foo1:Firstname>
    <foo1:Firstname>Michael</foo1:Firstname>
    <foo1:Lastname>Doe</foo1:Lastname>
</foo:NameHent>

以下不起作用:

public partial class NameHentParams
{
    private System.DateTime dateField;
    private string[] firstnameField;
    private string lastnameField;

    public System.DateTime Date
    {
        get { return this.dateField; }
        set { this.dateField = value; }
    }

    public string[] Firstname
    {
        get { return this.firstnameField; }
        set { this.firstnameField = value; }
    }

    public string Lastname
    {
        get { return this.lastnameField; }
        set { this.lastnameField = value; }
    }
}

【问题讨论】:

  • 仅此而已?命名空间定义(xmlns)在哪里?
  • @Sal Al 你有具体的答案吗?我无法通过简单地将 string[] 更改为 List 来使其工作
  • @Paweł Dyl 代码被缩短以专注于这个问题。对于这个问题,我们可以假设命名空间是好的。问题是如何解析名字标签。

标签: c# xml wcf soap


【解决方案1】:
var xml1 =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?><foo:NameHent xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:foo1=\"http://sample.com\" xmlns:foo=\"http://example.com\"><foo1:Firstname>John</foo1:Firstname><foo1:Firstname>Michael</foo1:Firstname><foo1:Lastname>Doe</foo1:Lastname><foo1:Date>1988-03-05</foo1:Date></foo:NameHent>";

 XmlSerializer xmlSerializer = new XmlSerializer(typeof(NameHent));
        NameHent c = xmlSerializer.Deserialize(new StringReader(xml1)) as NameHent;


public class NameHent
{
    [XmlElement(Namespace = "http://sample.com")]
    public string [] Firstname;

    [XmlElement(Namespace = "http://sample.com")]
    public string Lastname;

    [XmlElement(Namespace = "http://sample.com")]
    public string Date;

    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public NameHent()
    {
        xmlns.Add("foo", "http://example.com");
        xmlns.Add("foo1", "http://sample.com");
    }
}

【讨论】:

  • 不确定我应该在代码中更改什么。解析是“自动”完成的,并且在外部客户端调用特定方法时触发。我还使用 ServiceContract、OperationContract 和最后的 MessageContract 进行通信。
  • 我刚刚创建了一个 WCF 应用程序,它似乎按预期工作。
  • 如果您希望我将示例应用程序发送给您,请告诉我您希望我发送的位置
  • 我只对与我在上面发布的 SOAP 请求相匹配的 C# 代码感兴趣。 WCF 客户端请求是否与 SOAP 请求完全相同?
【解决方案2】:

我正在使用 WCF 测试客户端,但您也可以使用 SOAPUI 对其进行测试,

[ServiceContract]
public class NameHent
{
    [DataMember]
    public string[] Firstname;

    [DataMember]
    public string Lastname;

    [DataMember]
    public string Date;
}

【讨论】:

  • 能否请您在答案中包含 SOAP Request 和 NameHent 类?
  • 我已经添加了 NameHent 类,请求是由 WCF 测试客户端生成的
  • 这里提出的解决方案是什么?我尝试删除 getter 和 setter,但没有任何区别。
猜你喜欢
  • 2010-10-01
  • 2018-10-08
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2020-06-06
相关资源
最近更新 更多