Wcf 在不序列化XML内容的情况下创建MessageHeader

Wcf 在不序列化XML内容的情况下创建MessageHeader,wcf,serialization,soap,.net-3.5,Wcf,Serialization,Soap,.net 3.5,我正在尝试向第三方Java Web服务的请求头添加一个时间戳,如下所示: <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1120"> <wsu:Created>2013-03-05T07:18:42.672Z</wsu:Created>

我正在尝试向第三方Java Web服务的请求头添加一个时间戳,如下所示:

<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1120">
    <wsu:Created>2013-03-05T07:18:42.672Z</wsu:Created>
    <wsu:Expires>2013-03-05T07:23:42.672Z</wsu:Expires>
</wsu:Timestamp>

2013-03-05T07:18:42.672Z
2013-03-05T07:23:42.672Z
我正在使用这个代码-

Message request;    

// TESTVALUE
string content = "<Created>2013-03-05T07:18:42.672Z</Created><Expires>2013-03-05T07:23:42.672Z</Expires>";

MessageHeader msgHeader = MessageHeader.CreateHeader("Timestamp", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", content);
request.Headers.Add(msgHeader);
消息请求;
//测试值
字符串内容=“2013-03-05T07:18:42.672Z2013-03-05T07:23:42.672Z”;
MessageHeader msgHeader=MessageHeader.CreateHeader(“时间戳”)http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd“,内容);
request.Headers.Add(msgHeader);
问题是它将我的内容序列化为这个,我不知道如何修复这个问题-

    <Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         &lt;Created&gt;2013-03-05T07:18:42.672Z&lt;/Created&gt;&lt;Expires&gt;2013-03-05T07:23:42.672Z&lt;/Expires&gt;
    </Timestamp>

Created2013-03-05T07:18:42.672Z/CreatedExpires2013-03-05T07:23:42.672Z/Expires

我试图添加两个
XElement
,但问题是我只能提供其中一个。

问题是WCF正在将您指定为标题内内容的内容进行编码。您可以创建一个自定义的“Timestamp”类来处理时间戳的内容,而不是使用字符串。您可能可以使用
DataContract
对其进行序列化,但在最坏的情况下,您必须在新类中使用自定义XML序列化。

问题在于WCF正在将您指定为头中内容的内容进行编码。您可以创建一个自定义的“Timestamp”类来处理时间戳的内容,而不是使用字符串。您可能可以使用
DataContract
对其进行序列化,但最坏的情况是,您必须在新类中使用自定义XML序列化。

我需要在哪里应用DataContract?(我没有访问该服务的权限)您将为时间戳创建一个类,其中包含两个日期的属性。然后,您应该能够为它们命名,以匹配所需的XML元素名称。将DataContract应用于Timestamp,并将DataMember应用于这两个日期,它应该可以工作。我现在在一台平板电脑上,所以我无法证明。我需要在哪里应用数据契约?(我没有访问该服务的权限)您将为时间戳创建一个类,其中包含两个日期的属性。然后,您应该能够为它们命名,以匹配所需的XML元素名称。将DataContract应用于Timestamp,并将DataMember应用于这两个日期,它应该可以工作。不过,我现在正在使用平板电脑,所以我无法证明这一点。