我构建了第一个 WCF 服务,旨在接收 HTTP Post 请求,这些请求的消息正文采用严格的格式,我无法对其施加影响。这是一个例子:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<AcquirePackagingData xmlns="mydomain.com">
<Account xmlns="http://schemas.microsoft.com/v1.0">
<AssetIdentifier>ergegdgsdyeryegd</AssetIdentifier>
</Account>
</AcquirePackagingData>
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)
唯一会随每个请求而改变的位是 AssetIdentifier 的值。
我的wcf服务合同如下:
为了让自己能够最大程度地控制 XML,我选择使用 [XmlSerializerFormat] 来使用 XmlSerializer 而不是 DataContractSerializer。
Account 类非常简单: [XmlRoot(Namespace = " http://schemas.microsoft.com/v1.0 ")] [Serialized] public class Account {
private string m_AssetIdentifier;
[XmlElement]
public string AssetIdentifier
{
get { return m_AssetIdentifier; }
set { m_AssetIdentifier = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我向此服务发出请求时,就会出现问题。当我使用 WCF 测试客户端时,我可以看到它发出了以下请求:
<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">http://schemas.microsoft.com/DRM/2007/03/protocols/ILGIContentProtection/AcquirePackagingData</Action>
</s:Header>
<s:Body>
<AcquirePackagingData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols">
<challenge xmlns:d4p1="http://schemas.microsoft.com/DRM/2007/03/protocols/AcquirePackagingData/v1.0">
<d4p1:AssetIdentifier>ergegdgsdyeryegd</d4p1:AssetIdentifier>
</challenge> …Run Code Online (Sandbox Code Playgroud) wcf soap xml-namespaces datacontractserializer xmlserializer