[OperationContract]
string Security(string userName, string Password);
[OperationContract]
void XXX(XXX);
[OperationContract]
void YYY(YYY);
在我的 WCF服务中,我需要通过传递安全方法的凭据来调用void XXX
答案 0 :(得分:0)
虽然您可以将凭据作为每个方法的参数传递(更不用说可能不安全),但它却相当愚蠢。而是使用WCF的自定义用户身份验证行为。每次调用方法(确实收到消息)时,都会自动调用它们。它还使方法更清晰,因为它们没有到处填充用户名/密码。
MSDN:
默认情况下,当用户名和密码用于身份验证时,Windows Communication Foundation(WCF)使用Windows来验证用户名和密码。但是,WCF允许自定义用户名和密码身份验证方案,也称为验证程序。要合并自定义用户名和密码验证程序,请创建一个派生自UserNamePasswordValidator的类,然后对其进行配置。
无论您的服务是DataContract
还是MessageContract
,这些行为都会有效。
这些凭据加密并存储在邮件标题中,而不是存储在其他参数通常驻留的邮件正文中。
调用服务一次进行身份验证,再次执行某些操作的另一个问题是,您实际上强制该服务有状态,你可能不想要。通过将关于认证的信息与操作放在同一消息中,将发送的消息减半;提高性能,更重要的是,如果需要,允许您的服务成为无状态,可能会进一步改善性能。