问题标签 [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 投票
3 回答
27345 浏览

wcf - 什么是 HttpContext.Current.Request.RawUrl 的 WCF 等效项?

我有一些在纯 WCF 上下文中运行的 RESTful 服务(即未启用 ASP.NET 兼容性,因此没有HttpContext.Current可用的对象)。

服务的 URL 在请求开始时使用 an IHttpModule(此时确实有 anHttpContext并使用 重写它HttpContext.Current.RewritePath)重写,以摆脱.svcURL 中的扩展等内容。

但是,我需要访问从 WCF 基础结构中请求的原始 URL。HttpContext.Current.Request.RawUrl任何地方的OperationContext或类上是否有等价物WebOperationContext?使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri返回重写的 URL,而不是原始 URL。

0 投票
1 回答
6287 浏览

wcf - WCF 操作上下文

我正在开发 WCF 服务,如果出现错误,我想从服务上调用的原始方法序列化传入参数。我正在使用 IErrorHandler 来捕获所有异常。

我最初的想法是将序列化参数存储在 OperationContext.IncomingMessageProperties 中,以便我可以从 HandleError 方法中访问它。但是,由于这不是在原始线程上运行的,我相信 OperationContext 将为空,所以我正在考虑从 ProvideFault 方法访问它。

这看起来可行吗?它是否适用于 OneWay 服务调用?

0 投票
1 回答
1759 浏览

wcf - WCF:使用 OperationContext 区分 REST 和 SOAP 请求

在 WCF 安全性中,给定当前 OperationContext,确定请求是 SOAP 请求还是 REST 请求的最佳方法是什么?

0 投票
4 回答
4675 浏览

wcf - WCF 4 REST 服务不能返回 StatusDescription,只有 StatusCode

我目前正在将我的 WCF RESTful 服务从 .NET 3.5(Starter Kit)迁移到 .NET 4。我使用 Visual Studio 2010 中的 WCF Rest 服务模板开始了我的项目。我必须弄清楚如何保留我的授权方案(以前使用 ServiceAuthorizationManager 完成 RequestInterceptor。经过一些工作和研究,我完成了它。但现在我有一个附带问题。我的服务过去常常使用 HTTP 状态代码和简短描述来反馈我的客户任何处理错误。我在我的服务方法的许多地方都使用 WebOperationContext 向客户描述出了什么问题,如下所示:

但在 WCF 4 中,只有 StatusCode 有效 - StatusDescription 静默失败。我不知道为什么。我唯一的猜测是 WebOperationContext 在这个新的 WCF 4 场景中不起作用,我应该改用 OperationContext,但这也不起作用。在我的扩展 ServiceAuthorizationManager 的自定义类中使用了以下方法,通知客户端由于身份验证摘要格式错误而无法访问请求:

即使在此处使用 OperationContext 直接(安装为 WebOperationContext),StatusDescription 也不起作用。

我在这里缺少什么?为什么这么小的东西可以从.NET 3.5 突破到 4?

0 投票
2 回答
1549 浏览

wcf - 带有 HttpContext 的 WCF 服务

我有一个 Web 服务,我将它转换为具有相同 asmx 扩​​展名的 wcf 服务。我有 basicHttpbinding,因为我的服务与 java、perl 等各种客户端通信。

我有一个验证,其中包含 HttpContext.Current。但我知道这在 wcf 服务中不起作用。我正在尝试使用 RequestContext 或 OperationContext 但无法这样做。我试着用

[服务行为(InstanceContextMode=InstanceContextMode.PerSession)]

但没有帮助。我正在从soapUI 调用我的服务进行测试。

0 投票
1 回答
9804 浏览

c# - 如何从 WCF 操作合同中检索客户端的机器名称?

我目前正在查看 OperationContect.Current 属性。是否有一个(嵌套)属性将始终返回客户端的机器名称?我目前正在使用 net.tcp 绑定,但希望将来支持其他绑定。

使用 .NET 3.5 SP1

0 投票
0 回答
387 浏览

wcf - netPeerTCPBinding - OperationContext.Current.GetCallbackChannel 是否广播?

我发现了两个似乎相互矛盾的来源:

“当服务接收到呼叫时,OperationContext.Current.GetCallbackChannel 会向该呼叫者返回一个频道。它不会返回一个向所有客户端广播的频道。” - “OperationContext.Current.GetCallbackChannel”实际上是做什么的?

“首先,加入网格后,新加入的节点将发出单跳消息,请求共享状态记录的唯一记录标识符列表。网格中一跳之外的所有节点都将收到此消息。这些节点将然后使用回调合约直接回复网格。” - http://msdn.microsoft.com/en-us/magazine/cc700336.aspx

现在,两者哪一个是真的?而且,如果是广播,如何不广播直接响应网格中的另一个客户端?

提前致谢,

拉斯

0 投票
3 回答
3586 浏览

wcf - 使 WCF OperationContext 与 DI 和测试很好地配合使用

我正在运行托管在 Windows 服务中的 WCF 服务;WCF 服务的依赖项是通过 Unity 注入的,这一切都很好。因此,该服务也很容易为其编写单元测试。

最近,我向服务中添加了使用 OperationContext 检查传入消息的功能。不幸的是,由于微软对密封和/或静态类的喜爱以及缺乏接口和/或虚拟方法,这反而使服务的可测试性失去了意义。

所以在这种情况下,我求助于 .NET 人最喜欢的工具,一个包装类。由于这是一个常见问题,因此有人已经为我们完成了艰苦的工作。因此,这为我的 WCF 服务添加了一个新的依赖项,即 IOperationContext 的实现。这对我的单元测试来说没问题,NSubstitute 是我选择的模拟框架(就像 Moq,但没有.Object.

但是,当我尝试真正启动服务时,我遇到了以下问题 - 正在包装的 OperationContext 在 IoC 容器注册完成时尚未初始化。我的初始化代码(在这里使用 Unity)是:

但是此时,OperationContext.Currentnull,所以 Unity 立即抛出异常,我的 40 岁之前退休的梦想付诸东流。

所以,问题是:如何让 WCF 与 DI 和 Wrapped 很好地配合使用OperationContext

0 投票
1 回答
429 浏览

wcf - 通过 OperationContext 检查 ReaderQuotas 设置

我有一个 WCF 服务,我为其指定了自定义绑定/readerQuotas 设置。但是,该服务仍然失败并显示以下消息:

已超出最大字符串内容长度配额 (...)"

我怀疑可能无法应用 readerQuotas 设置,因为该服务是通过自定义ServiceHostFactory(我无权访问)实例化的。

有没有办法使用 ? 检查服务的当前 readerQuotas 设置OperationContext

0 投票
4 回答
26793 浏览

asp.net - 如何在 WCF 服务中记录原始请求

我有一个带有多种方法的 WCF 服务。我想记录来自客户端的原始请求,无论它是如何发送的。一种方法接受数据作为查询字符串(严格用于遗留支持),我可以使用以下方式记录:

在这种情况下就足够了,但其他方法允许客户端使用由 svcutil.exe 生成的代理类将数据作为 XML 发送。在这种情况下,我在 s:Body 中找到了我想要的数据:

不幸的是,无论我尝试什么,我都无法在读取之前创建消息的缓冲副本。这是一个例子:

但是,在 SendCustomer 的第一行,我收到以下错误:

此消息无法支持该操作,因为它已被读取。

这就是我创建缓冲副本的目的,确定吗?我猜我在这里做错了。

编辑:

好的,所以方法现在是这样的:

我的问题是我不知道如何将 Customer 和 ClientKey 作为单独的实体发送。我可以使 clientKey 成为 Customer 的属性(或创建一个专门用于传入数据并包含 Customer 和 ClientKey 作为属性的自定义对象),但如果可能的话,我想避免这种情况,因为这是对遗留系统的升级已经这样工作了。

我也无法使用 svcUtil.exe 创建我的代理类 - 我假设具有上述方法签名意味着我的服务将不再宣传正确的签名来发送请求?不确定这是否足够清楚 - 如果我唯一的输入法接受 Message 对象,我的客户怎么知道要发送 Customer 和 ClientKey?