强制参数作为服务合同属性

毫米波

我需要为非常特定的SOAP布局编写服务合同(端点不在我们的控制之下)。本质上,我需要生成以下肥皂请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <auth message-id="1">
            <login>
                <UserName>goLocalTeam</UserName>
                <Password>yeay!</Password>
            </login>
        </auth>
    </soapenv:Body>
</soapenv:Envelope>

我创建了以下合同:

[ServiceContract(Namespace="", SessionMode=SessionMode.NotAllowed)]
public interface IPrototype
{
    [OperationContract(Action="auth")]
    string auth([MessageParameter(Name = "message-id")]int messageId, Login login);
}

[DataContract(Namespace="")]
public class Login 
{
    [DataMember]
    public string userName { get; set; }
    [DataMember]
    public string Password { get; set; }

}

但是,当我构造一个客户端并调用时,该message-id参数被呈现为内部的一个节点,<auth>而不是一个属性。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">auth</Action>
  </s:Header>
  <s:Body>
    <auth>
      <message-id>0</message-id>
      <login>
        <userName>yay</userName>
        <Password>yoy</Password>
      </login>
    </auth>
  </s:Body>
</s:Envelope>

知道如何使WCF将简单类型的参数从节点切换到属性吗?

爱立信

使用XmlSerializerFormat属性而不是DataContract

看一下MSDN,以确切地了解如何使用它,但是基本上,您使用XmlAttribute标记成员XmlElement,因此它看起来像:

[ServiceContract(Namespace="", SessionMode=SessionMode.NotAllowed)]
public interface IPrototype
{
    [OperationContract(Action="auth")]
    string Auth(AuthRequest authRequest);
}
[MessageContract(IsWrapped = false)] // notice the unwrapping
public class AuthRequest
{
    [XmlAttribute]
    public int message-id { get; set; }
    [XmlElement]
    public Login Login { get; set; }
}
[MessageContract]
public class Login 
{
    [XmlElement]
    public string userName { get; set; }
    [XmlElement]
    public string Password { get; set; }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取列值作为不同属性的数组列表

来自分类Dev

docker作为服务参数

来自分类Dev

C#使用强制转换属性作为参数调用泛型方法

来自分类Dev

Typescript接口属性作为键入函数参数未强制执行

来自分类Dev

C#使用强制转换属性作为参数调用泛型方法

来自分类Dev

使用参数作为属性

来自分类Dev

强制子类覆盖法本身作为参数

来自分类Dev

使用argparse作为无前缀的强制参数

来自分类Dev

将属性作为参数传递

来自分类Dev

传递属性类型作为参数

来自分类Dev

URL参数作为属性绑定

来自分类Dev

将属性作为参数传递

来自分类Dev

不同属性的用户

来自分类Dev

强制至少一个参数作为rest参数

来自分类Dev

球拍参数合同错误

来自分类Dev

无法使用两个或多个参数调用WCF服务合同

来自分类Dev

AngularJS。将服务作为指令的参数传递

来自分类Dev

对象数组作为Rest服务中的参数

来自分类Dev

方法返回值作为服务参数

来自分类Dev

带有对象作为参数的Jersey服务

来自分类Dev

如何使用TLS 1.0强制jboss 7作为https服务?

来自分类Dev

如何在Go中强制传递参数作为指针?

来自分类Dev

强制接收实现接口的超类指针作为方法的参数

来自分类Dev

c ++ 在作为参数传递时强制隐式转换

来自分类Dev

精巧的表值参数作为属性?

来自分类Dev

使用属性参数作为表单名称

来自分类Dev

如何传递对象属性作为参数?

来自分类Dev

实例作为属性(类型错误的位置参数)

来自分类Dev

访问类属性作为装饰器参数