我有一个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消息指定但通常在那里有一个序列化对象。
我有以下问题:
StatusMessage
的值? (我已将该属性添加到具有相同名称的类中,但从未填充它)任何指针都非常感激 - 但正如你可以说我是SOAP的新手,只是试图理解别人的代码。
答案 0 :(得分:0)
如果你看到到达的消息,令牌是i:nil =“true”这就是你的令牌为空的原因
StatusMessage和Message是消息中令牌的兄弟,而不是它的子节点。您需要将StatusMessage和Message添加到RequestResponseBase以便填充它们