我是wcf服务的新手,我看到人们在进行wcf服务的任何函数调用时总是发送用户凭证,如下所示。
private static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
delegate { return true; });
var client = new WcfServiceClient();
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password;
Console.Write(client.GetData(1));
client.Close();
Console.Read();
}
我想我将通过用户凭证一次,并且在认证之后用户可以多次调用任何服务功能而无需凭据。所以指导我如何设计这种服务。寻找有助于我学习的小样本代码实行。感谢
答案 0 :(得分:1)
您需要enable sessions服务,然后您的客户才能与服务建立会话。只有在使用相同的通道与服务通信时才会发生这种情况。
在上面的代码中,例如,当您调用Close()时,会话将终止。
为了您建立一次安全上下文然后重新使用它,您需要建立一个secure session,这意味着一次检索安全令牌,然后重复用于后续操作调用。
但是,这仅适用于某些绑定,并且不适用于basicHttpBinding。
<强>更新强>
我发布的第二个链接概述了使用安全会话公开服务的两种不同方法。不幸的是,客户端代码不包含在文章中。
客户端代码可以使用svcutil.exe(或VS中的“添加服务引用”)生成,也可以使用WCF通道堆栈使用包含服务操作和数据协定定义的程序集动态创建客户端。
如果使用标准WCF绑定之一在<system.servicemodel/>
配置部分配置安全会话,则可以将绑定配置复制并粘贴到客户端配置中,这是客户端使用安全所需的全部内容会话。
因此WCF堆栈会为您处理此问题。希望这很清楚。