gpt4 book ai didi

c# - 在 WCF UsernamePasswordValidator 中访问当前的 InstanceContext

转载 作者:行者123 更新时间:2023-11-30 15:47:42 25 4
gpt4 key购买 nike

我有一个使用自定义 UsernamePasswordValidator 的 WCF 服务。验证器需要访问我的 Entity Framework 上下文。

我想为整个服务调用创建一个 ObjectContext,然后在调用结束时销毁/处置它。因此,我创建了一个提供此功能的单例静态类,但是,现在发生的情况是,如果同时发生两个服务调用,其中一个调用会处置单例。

我要么保留对 ObjectContext 的本地引用,在这种情况下,使用它的第二个服务将其视为已处置并抛出错误,要么,我在任何需要的地方围绕 Singleton 类放置一个包装器属性,然后我所有的更改会被丢弃,因为如果另一个调用已处理该对象,我将获得该对象的新实例。

所以基本上我的问题是如何在每次服务调用时实例化 ObjectContext?

注意:实例需要在服务代码和自定义 UsernamePasswordValidator 代码中都可以访问。

我不能只在构造函数中执行此操作或使用 using 语句,因为那样自定义 UsernamePasswordValidator 无法访问它。有没有办法让每次调用都有一个静态类?这听起来确实不可能,但是解决这个问题的方法是什么?我应该在 session 中缓存对象吗?

我的服务托管在 IIS 中。

更新:
因此,我将其确定为使用 IExtension 对象将状态存储在 InstanceContext 中。但是如何在 UsernamePasswordValidator 中访问当前的 InstanceContext?

最佳答案

好的,最后我通过使用以下静态类并依靠 ASP.NET 为我缓存上下文来解决它。

我不确定这是否是最好的做事方式,但这允许我为每个请求使用一个 ObjectContext,所以我不会旋转太多,这也意味着我不必使用锁如果许多用户使用该服务,这将成为一场噩梦。

public static class MyContextProvider
{
public static MyModel Context
{
get
{
if (HttpContext.Current.Items["context"].IsNull())
{
HttpContext.Current.Items["context"] = new MyModel();
}

return HttpContext.Current.Items["context"] as MyModel;
}
}
}

然后在应用程序中任何需要 ObjectContext 的地方我都可以调用

var context = MyContextProvider.Context;

关于c# - 在 WCF UsernamePasswordValidator 中访问当前的 InstanceContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com