如何在我的WCF服务SOAP请求XML中停止d4p1作为必需的名称空间前缀

时间:2013-04-18 15:51:26

标签: wcf soap xml-namespaces datacontractserializer xmlserializer

我已经构建了我的第一个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>

每个请求唯一会改变的是AssetIdentifier的值。

我的wcf服务合同如下:

为了给自己最大限度地控制XML,我选择使用XmlSerializer而不是DataContractSerializer来使用[XmlSerializerFormat]。

Account类非常简单:     [XmlRoot(Namespace =“http://schemas.microsoft.com/v1.0”)]     [序列化]     公共类帐户     {

    private string m_AssetIdentifier;

    [XmlElement]
    public string AssetIdentifier
    {
        get { return m_AssetIdentifier; }
        set { m_AssetIdentifier = value; }
    } 

}

当我向此服务发出请求时,会出现问题。当我使用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>
    </AcquirePackagingData>
  </s:Body>
</s:Envelope>

请注意已引入的d4p1命名空间别名的存在。如果我使用不包含这些别名的请求XML请求服务,请求将失败,并且AcquirePackagingData方法收到的Account对象上有一个空指针。

我最初尝试使用DataContractSerializer但遇到了同样的问题。我希望使用XMLSerializer得到不同的结果。我在这个论坛的其他地方读过,也许我可以使用以下方法,但它没有任何区别:

[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/v1.0")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.microsoft.com/v1.0", IsNullable = false)] 
public class Account
{
....
}

任何人都可以让我知道如何修改我的服务,以便请求XML包含命名空间而不是那些讨厌的d4p1别名吗?

由于

0 个答案:

没有答案