Wcf 使用代理应用安全标头?

Wcf 使用代理应用安全标头?,wcf,security,header,Wcf,Security,Header,我有一个custrom soapheader,看起来像这样: [DataContract()] public class IntegrationHeader { [DataMember] public string UserName; [DataMember] public string Password; } 然后我在messageInspector中有以下代码: if (request.Headers.

我有一个custrom soapheader,看起来像这样:

[DataContract()]
    public class IntegrationHeader
    {
        [DataMember]
        public string UserName;
        [DataMember]
        public string Password;
    }
然后我在messageInspector中有以下代码:

if (request.Headers.Action == null || request.Headers.Action.ToString().Length < 1)
                return null;

            foreach (var header in request.Headers)
            {
                if (header.Namespace == "ns" && header.Name == "SecurityToken")
                {
                    loginHandler = new LoginHandler();

                    integrationHeader = request.Headers.GetHeader<IntegrationHeader>(header.Name, header.Namespace);
                    if ((userContext = loginHandler.LoginUser(integrationHeader.UserName, PassWordManager.DESEncrypt(integrationHeader.Password), Business.Entity.LoginType.Regular)) == null)
                        throw new SecurityTokenException("Unknown username or invalid password");

                    Thread.CurrentPrincipal = userContext;

                    return null;
                }
            }

            throw new SecurityTokenException("Unknown username or invalid password");
问题是,运行此代码时,messageInspector中只有两个头,而没有一个是安全头


我做错了什么?

这是正确的解决方案:

            IntegrationHeader ih = new IntegrationHeader { UserName = "X", Password = "X" };

            MessageHeader untyped = MessageHeader.CreateHeader("SecurityToken", "ns", ih);
            using (new System.ServiceModel.OperationContextScope(client.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
                client.GetData(request);
            }

服务调用将在using else中完成。安全标头将从传出上下文中删除。

您是否已逐步检查检查程序代码并验证其是否按预期运行?旁注:这是“肥皂”,不是“汤”;-)@Jeroen>是请求。After ReceiverRequest(服务端)中的头将有两个头。第一个名称空间为,header.Name=To,第二个名称空间相同,但header.Name=Action。我不明白为什么要添加nog头?这可能是名称空间问题?IntegrationHeader位于名称空间MyApp.DataContracts.OSI中。
                IntegrationHeader ih = new IntegrationHeader { UserName = "X", Password = "X" };

                MessageHeader untyped = MessageHeader.CreateHeader("SecurityToken", "ns", ih);
                using (new System.ServiceModel.OperationContextScope(client.InnerChannel))
                {
                    OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
                }

                client.GetData(request);
            }
            IntegrationHeader ih = new IntegrationHeader { UserName = "X", Password = "X" };

            MessageHeader untyped = MessageHeader.CreateHeader("SecurityToken", "ns", ih);
            using (new System.ServiceModel.OperationContextScope(client.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
                client.GetData(request);
            }