使用自定义参数将值添加到WCF标头中

时间:2013-04-10 09:39:32

标签: c# wcf soapheader

您好我们正在使用一些政府WCF服务。 在旧的方法中,他们正在寻找像这样的肥皂头。

<islemKodu>2</islemKodu>
<islemNedeni>Döküman iptal edildi</islemNedeni>

我们将MessageInspector添加到此处;

public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
request.Headers.Add(MessageHeader.CreateHeader("islemKodu", "", "2"));
request.Headers.Add(MessageHeader.CreateHeader("islemNedeni", "", "Döküman iptal edildi"));
return null;
}

所以这是正常的。

但是政府已经像这样更改了肥皂标题。

<param:SaglikNetParameters xmlns:param="http://saglik-net.saglik.gov.tr/parametreler/">
<param:parameter name="islemKodu">2</param:parameter>
<param:parameter name="islemNedeni">Döküman iptal edildi</param:parameter>
</param:SaglikNetParameters>

所以现在我怎么能改变我们的BeforeSendRequest方法,像肥皂头

中的这个自定义参数一样发送

1 个答案:

答案 0 :(得分:2)

您需要创建一个特殊的标头类来输出soap XML以匹配所需的结构。请查看此blog post以了解您需要实施的代码。

基本上,您需要创建类以输出所需的XML,然后按如下方式使用该类:

// %< snipped >%

var specialHeader = GovMsgHeader.CreateHeader( /* any parameters */ );
request.Headers.Add(specialHeader);

// %< snipped >%

特殊类看起来像这样:

public class GovMsgHeader : MessageHeader {
    protected override void OnWriteStartHeader(
        System.Xml.XmlDictionaryWriter writer,
        MessageVersion messageVersion) {

        base.OnWriteStartHeader(writer, messageVersion);

        // Write your custom XML using the XmlDictionaryClass:
        //TODO: add the 'param' XML namespace to the writer...
        //TODO: add the container element with something like this:
        writer.WriteElementString("SaglikNetParameters", "param", "");

        writer.WriteElementString("parameter", "param", "2");
        writer.WriteAttributeString("name", "", "islemKodu");
        //TODO: complete the rest of the XML ...
    }
}