问题标签 [operationcontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2314 浏览

wcf - 将 OperationContext.Current 存储在 WCF 服务实例的实例变量中

我想知道在 WCF 服务主机实例的实例变量中存储和引用 OperationContext.Current 对象是否明智。服务主机设置为 InstanceContextMode.PerCall,因此每个新请求都有自己的实例。

我问这个的原因是因为 WCF 不保证线程亲和性。有时,WCF 可以在一个线程上启动请求并在另一个线程上结束请求。

OperationContext.Current 对象存储在线程本地存储中。当新线程用于同一操作时,WCF“传播”到新线程。

在这种情况下,当 WCF 开始使用不同的线程时,访问存储在我的服务实例的实例变量中的 OperationContext 对象是否仍然安全?

0 投票
1 回答
296 浏览

c# - 允许操作访问共享上下文(如 WCF 中的 OperationContext)

我想在我的应用程序(.NET、C#)中为正在进行的操作实现特定的上下文,以便应用程序启动和执行的代码可以访问它。

问题是上下文没有像某些 API 那样作为对象传递。

我想在 WCF 中实现类似于 OperationContext 的东西,这个静态类可以为每个操作提供其上下文。

如何实现这样的系统?

一个示例用法:

我们的应用程序加载并执行由有权访问我们 SDK 的任何人创建的第 3 方“插件”。

这样的用户代码可能如下所示:

根据这个例子,我只需要一些静态的 Context 类,但我如何确保它对于我的应用程序中的每个执行操作都是唯一的?

0 投票
3 回答
1521 浏览

.net - 将 OperationContext 保存在任务并行库中

我们在深度抽象程序集中的某个地方有一个从 OperationContext.Current 读取数据的 WCF 行为,当从任务中执行此代码时,OperationContext.Current 为空,是否可以在抽象程序集中解决这个问题,或者我们会需要向这个程序集的所有消费者添加一些代码吗?

0 投票
0 回答
419 浏览

.net - WCF 操作上下文 - 污染

我正在研究一个问题,即从 OperationContext 检索扩展实例时,不同操作之间似乎存在一些交叉污染。它是那些令人讨厌的基于难以复制的并发问题之一。我强烈怀疑某种线程问题。我们在 IIS7.0/.NET 4 集成模式下运行 WCF 服务。我们扩展的相关部分如下:

以上是从 PostSharp 方面调用的,我不确定这是否相关?鉴于上述情况,是否存在对 current 的调用可能返回错误的 CustomContext 实例的明显条件?为这样一个开放式问题道歉。

0 投票
1 回答
1389 浏览

.net - 多线程环境中的 OperationContext.Current.SessionId

我有一个连接到多个客户端的 WCF 服务。服务配置如下:

在我使用的服务中,使用 OperationContext.Current.SessionId 识别客户端。

想象一下以下场景: - Client1 调用 Register - 服务在 Thread1 中运行 Register - 在一段时间后 Client2 调用 Register - 服务也在 Thread1 中运行 Register(理论上是可能的,不是吗?)

知道 OperationContext.Current 是 ThreadStatic,显示第二个调用的内容:

  • 会话 1,因为 OperationContext.Current 已在第一次调用中设置
  • 还是第 2 节 ..?

先感谢您 ...

0 投票
5 回答
27905 浏览

c# - WCF Windows 服务中的当前 OperationContext 为空

我正在尝试使用 WCF 设置发布/订阅系统,并且 WCF 服务器位于 Windows 服务中。绑定是 net.TCP。该服务向客户端提供“订阅”方法,以便客户端可以将回调处理程序注册到将从链接到服务器的 DLL 引发的事件。在订阅方法中,我尝试使用 OperationContext.Current.GetCallbackChannel 方法获取回调通道。当我尝试这样做时,OperationContext.Current 属性返回 NULL。

谁能告诉我在什么情况下这个属性会返回 null?我错过了设置吗?我将在下面包含服务代码和接口代码。我在 Visual Studio 2012 中使用 c# 并以框架 4.5 为目标。

服务:

界面:

客户:

** * ** * ** * 新编辑 * ** * ** * ** * ** * ** 感谢 SalientBrain 的建议,我对我的项目进行了相当大的更改,因为我意识到即使没有连接客户端,服务也必须长时间运行并持续运行,因此我将其更改为单例。即便如此,我原来的问题仍然存在。SalientBrain 已要求查看我的配置文件,因此我将其与所有其他相关文件一起包含在下面。我已将其剥离以节省空间,但我认为我没有删除任何重要的东西。错误发生在 PulisherService 类的 Subscribe 方法中。我希望这是我在配置文件中所做的一些愚蠢的事情。好吧,这里是:

配置:

Wcf合同:

Wcf 服务:

Windows服务:

测试表格:

测试回调类:

0 投票
1 回答
533 浏览

wcf - 如何在双工回调中读取 WCF 消息头?

在正常的 WCF 请求/回复合同中,您可以使用以下内容读取消息标头:

我不知道如何在双工合约的回调端执行此操作。回调实现内部OperationContext.Currentnull.

编辑 4/5/2013:我正在使用基于 net.tcp 的自定义绑定,但有很多自定义项。例如,使用协议缓冲区消息编码而不是 Xml。还有一些自定义安全性。

0 投票
0 回答
618 浏览

wcf - IIS 8 - 为什么 WebOperationContext.Current.IncomingRequest 在 ServiceAuthorizationManager 类的 CheckAccessCore 方法中为空

周转量 4.5

我已经创建并成功实现了 CustomAuthorizationManager,它继承了 ServiceAuthorizationManager 类并覆盖了过去在 IIS7 上的 CheckAccessCore 方法。

现在,我在 IIS 8 上遇到以下问题:

“WebOperationContext.Current.IncomingRequest 为空”。

配置文件正确指向 CustomAuthorizationManager 类并调用 CheckAccessCore 方法,但 operationContext 突然为空,尽管在 IIS 7 上它工作得很好。

请帮忙

0 投票
1 回答
862 浏览

c# - 如何在不使用操作上下文的情况下在 c# 中编写单元测试用例?

在我的项目中,我有一个方法 PreAction() 用于所有方法。PreAction() 包含操作上下文对象,即

因此,当我尝试在该方法中调用方法 X 时,我使用的是 PreAction() 方法。因此,由于操作上下文属于服务模型,我收到一个异常,表明对象引用未设置为对象的实例。

那么如何克服这种情况呢?有没有办法使用 Mokking,我们可以解决这种情况吗?

谢谢!!!

0 投票
0 回答
173 浏览

wcf - 如何提供 WCF 客户端的服务器端管理控制?

我有一个 WCF、基于 tcp 的客户端服务器应用程序(自托管),其中通信通过回调发生,InstanceContextMode 是 PerSession。我想为这个应用程序提供一个管理界面,它允许管理员查看所有连接用户的详细信息并提供一定程度的管理控制(例如强制断开会话)。

由于我使用回调,每个客户端代理通过构造函数为服务器提供其实例上下文。例如,客户端使用以下命令将其代理实例化到服务器:

在服务器端,我使用以下方法检索此上下文:

我最初的想法是实现一个单独的“SessionAdmin”类,它维护一组 OperationContext 对象(即 - 持有对每个连接客户端的上下文的引用)。每个新的客户端会话都将注册到“SessionAdmin”类的相同实例,从而提供一个可以访问所有客户端会话的中心类。

这在一定程度上是有效的,但是当我访问我的“OperationContext”对象集合以获取客户端详细信息或执行一些其他操作时,我注意到上下文正在抛出“对象已处理”异常。

首先,我的问题是,以上听起来像是对 WCF 会话提供服务器端管理控制的合理方式吗?如果是这样,我如何在服务器端维护一组客户端会话或其上下文而不释放这些对象?问题的一个例子是: