1

次のようなサードパーティの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>

私はこのコードを使用しています -

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);

問題は、コンテンツをこれにシリアル化することであり、これを修正する方法がわかりません-

    <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>

を 2 つ追加しようとしましXElementたが、問題はこれらのうちの 1 つしか提供できないことです..

4

1 に答える 1

1

問題は、ヘッダーのコンテンツとして指定したものを WCF がエンコードしていることです。文字列を使用する代わりに、カスタムの「タイムスタンプ」クラスを作成して、タイムスタンプの内容を処理することができます。おそらく a を使用しDataContractてシリアル化できますが、最悪の場合、新しいクラスでカスタム XML シリアル化に頼る必要があります。

于 2013-03-05T17:08:37.693 に答える