Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF-在身份验证后保留自定义数据_C#_Wcf_Session - Fatal编程技术网

C# WCF-在身份验证后保留自定义数据

C# WCF-在身份验证后保留自定义数据,c#,wcf,session,C#,Wcf,Session,我使用自定义用户名/密码验证程序。我必须创建一个特殊的对象,它依赖于用户名/密码。此对象将在服务中进一步使用。验证器看起来像: public class CustomUserNamePasswordValidator: UserNamePasswordValidator { public override void Validate(string userName, string password) { if (string.IsNullOrEmpty(userN

我使用自定义用户名/密码验证程序。我必须创建一个特殊的对象,它依赖于用户名/密码。此对象将在服务中进一步使用。验证器看起来像:

public class CustomUserNamePasswordValidator: UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
        {
            throw new ArgumentNullException();
        }

        try
        {
            var session = new Session(userName, password);
        }
        catch(Exception)
        {
            throw new SecurityTokenException("Unknown Username or Password");
        }
    }
}
会话是我自己的类型。我尝试通过web服务提供对另一个API的web访问。认为每个API调用都应该提供会话对象。 我可以保留会话对象以便在服务方法中使用它们吗?对于每个服务实例(每个调用或每个会话),该对象应该是不同的。在会话类型实现IDisposable的情况下,最好的方法是什么?
谢谢。好的。如果希望为WCF服务的每个实例创建会话对象,可以在WCF服务的构造函数中创建此会话对象。每个方法将通过实例字段访问会话对象,每个方法将通过OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name属性访问用户名。当然,方法将无法访问密码

但我无法在WCF服务实例中获取密码。因此,我无法创建MySession对象。我照着这个方法做的。WCF服务具有带有登录/密码的公共静态字典。CustomValidator将登录名/密码存储在此字典中。WCF服务使用字典和OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name(或类似名称)创建(在构造函数中)MySession对象。但这条路有味道。1) 我被迫创建了两个MySession对象——在验证器中和在服务中。2) 我在内存中存储密码-安全问题。此外,还可以更改密码。