访问SOAP信封中的所有值

时间:2011-09-06 10:16:50

标签: asp.net wcf web-services soap

我有一个SOAP响应,如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  
    <s:Body> 
        <RegisterAccountResponse  xmlns="http://site.com/services/player"> 
            <RegisterAccountResult  xmlns:a="http://site.com/entities/player/account"  
                    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
                <Token  i:nil="true" xmlns="http://site.com/contracts/common"  xmlns:b="http://site.com/entities/communication"/> 
                <StatusCode  xmlns="http://site.com/contracts/common">UserAlreadyExists</StatusCode>
                <StatusMessage xmlns="http://site.com/contracts/common">
                    Customer with same name and  date of birth already registered
                </StatusMessage>
                <a:PlayerAccount  i:nil="true"/>
            </RegisterAccountResult>
        </RegisterAccountResponse>
    </s:Body>
</s:Envelope>

以某种方式设法填充以下响应类:

namespace Site.Messages.Player.Account
{
    [DataContract(Namespace = "http://site.com/entities/player/account")]
    public class RegistrationResponse : ResponseBase
    {
        /// <summary>
        /// Gets or sets the player account.
        /// </summary>
        /// <value>The player account.</value>
        [DataMember]
        public PlayerAccount PlayerAccount { get; set; }
    }
}

回应基础:

namespace Site.Messages.Common
{
    /// <summary>
    /// Base class for all Request / Response classes.
    /// </summary>
    [DataContract(Namespace = "http://site.com/contracts/common")]
    public abstract class ResponseBase : RequestResponseBase
    {

    }
}

RequestResponseBase:

namespace Site.Messages.Common
{
    /// <summary>
    /// Base class for all Request / Response classes.
    /// </summary>
    [DataContract(Namespace = "http://site.com/contracts/common")]
    public abstract class RequestResponseBase
    {
        public string StatusCode; //always null

        public string StatusMessage; //always null

        public Token Token;
    }
}

以下几行似乎负责启动此过程:

ActivatedClient<Contracts.Player.IAccount> client = null;

try
   {
       client = new Activator().ConnectPlayerServiceAccount();
       return client.Instance.RegisterAccount(request);
   }
   finally
   {
       if (client != null) client.Close();
   }

这个时间PlayerAccount为空,因为SOAP消息指定但通常在那里有一个序列化对象。

我有以下问题:

  • 如何访问SOAP信封中定义的StatusMessage的值? (我已将该属性添加到具有相同名称的类中,但从未填充它)
  • 这个班级甚至如何填充? (内部运作,规则等)

任何指针都非常感激 - 但正如你可以说我是SOAP的新手,只是试图理解别人的代码。

1 个答案:

答案 0 :(得分:0)

如果你看到到达的消息,令牌是i:nil =“true”这就是你的令牌为空的原因

StatusMessage和Message是消息中令牌的兄弟,而不是它的子节点。您需要将StatusMessage和Message添加到RequestResponseBase以便填充它们

相关问题