为WCF身份验证指定凭据

时间:2014-07-17 12:01:31

标签: c# winforms wcf

我有一个WinForms + WCF + SQL应用程序,我试图使用内置的WCF安全功能来保护它。

我处于需要使用UserName安全性的位置,所以在客户端我明白,无论何时创建代理或频道,我都需要指定ClientCredentials

目前,WCF调用在整个客户端中都是这样做的:

private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

这里最好的方法是什么?我应该在客户端代码中完成代理的每个实例化并设置ClientCredentials属性吗?我想到的另一种方法是在ChannelFactory中指定一次凭据并在应用程序周围传递ChannelFactory。这两种方法似乎都需要大量的返工或重复,这让我觉得我对某些东西一无所知。

1 个答案:

答案 0 :(得分:0)

您可以实现IClientMessageInspector以在每个外发邮件中包含用户凭据。

public class ClientMessageInspector : IClientMessageInspector
    {
        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            var credHeader = new YourCustomHeader
            {
                UserName = "UserName",
                Password = "Password"
            };

            var typedHeader = new MessageHeader<CustomHeader>(credHeader);
            var untypedHeader = typedHeader.GetUntypedHeader("custom-header", "s");

            request.Headers.Add(untypedHeader);
            return null;
        }

        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            //
        }
    }

IClientMessageInspector Interface

Accessing clientcredential properties from client message inspector

Creating Custom WCF Endpoint Behavior

Consuming a web service using digest authentication