سؤال

Hi we are using some goverment WCF service. In old method they are looking in soap header like this.

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

and we are add in MessageInspector to this;

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

so this is working right.

but goverment has change the soap header like this.

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

so now how can i change our BeforeSendRequest method to send like this custom parameters in soap header

هل كانت مفيدة؟

المحلول

You'll need to create a special header class to output the soap XML to match the required structure. Look at this blog post for the code you need to implement.

Basically, you need to create the class to output the required XML and then use that class as follows:

// %< snipped >%

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

// %< snipped >%

The special class would look something like this:

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 ...
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top