我有一个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
。这两种方法似乎都需要大量的返工或重复,这让我觉得我对某些东西一无所知。
答案 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