I am consuming a WCF service that requires headers from a .NET 2 website. How can I programmatically add the headers to the messages?

陌路散爱 提交于 2019-12-08 08:23:45

Ok, I managed to sort this one out.

I created my own service class as I mentioned in the update, and created my own GetWriterForMessage method, like this:

Partial Public Class MyExtendedServiceHost
    Inherits MyService.MyServiceHost

    Private _token As String

    Public Sub New(ByVal token As String)
        _token = token
    End Sub

    Protected Overrides Function GetWriterForMessage(ByVal message As System.Web.Services.Protocols.SoapClientMessage, ByVal bufferSize As Integer) As System.Xml.XmlWriter
        Dim myWriterForMessage As System.Xml.XmlWriter

        Dim myTokenHeader As TokenSoapHeader
        myTokenHeader = New TokenSoapHeader()
        myTokenHeader.Value = _token

        message.Headers.Add(myTokenHeader)
        myWriterForMessage = MyBase.GetWriterForMessage(message, bufferSize)

        Return myWriterForMessage
    End Function
End Class

I also had to create a class for my token header:

<XmlRoot(Namespace:="urn:userinfo", ElementName:="Token", DataType:="string", IsNullable:=False)> _
Public Class TokenSoapHeader
    Inherits System.Web.Services.Protocols.SoapHeader

    <XmlText()> _
    Public Value As String
End Class

Now I can run this code without any issues and the header is being passed down correctly:

Private myService As New MyExtendedServiceHost("my-token-here")
myService.Url = "http://myserver:1234/MyService"
myService.MyMethod()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!