问题标签 [channelfactory]

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 投票
2 回答
2035 浏览

wcf - 如果 WCF 代理的方法不可见,它如何实现 ICommunicationObject?

WCF 通道(通过 ChannelFactory 创建)如何实现 ICommunicationObject,但不公开 Close() 方法,例如,除非您将代理转换为 ICommunicationObject?那有意义吗?

我今天在回家的路上一直在想这件事,但我想不通。也许我问错了问题?也许我在问一个愚蠢的问题?:)

这是某种忍者技巧吗?

0 投票
0 回答
778 浏览

c# - 当我抛出 FaultException 时 WCF 通道重试 5 次

我正在使用DuplexChannelFactory而不是生成的代理创建 WCF 客户端通道。

对于一个特定的方法,我FaultException<MyFault>在服务器端抛出一个已知的。我已根据需要标记了服务接口[FaultContract(typeof(MyFault))]

在客户端,我发现了这个FaultException<MyFault>并显示了一个错误。

所有这些工作都很好,但由于某种原因,WCF 在将控制权返回给我的客户端代码之前重试了服务调用 5 次。这会导致客户端出现明显的延迟。

在继续执行我的代码的下一行之前,调试器在我的客户端代码中的服务调用中中断了 5 次。我无法进入它,但调用堆栈显示异常在 WCF 深处引发。

服务端的断点只触发一次。

一旦控制权返回给我,通道就不会出现故障。

调试器输出显示:

这是正常行为吗?当我返回一个已知的预期错误时,为什么 WCF 会重试?

0 投票
1 回答
76 浏览

wcf - WCF 有没有办法将工厂关联到创建的通道

我正在使用 WCF 在服务器应用程序和客户端应用程序之间创建连接。

因为我正在使用NetTcpBinding,所以我想保持由以下人员创建的频道:

我将代理实例带入我的应用程序以与服务器通信。在某个时刻,我用不同的工厂更新了这个代理。但我想通过处置它从第一个工厂释放资源。但我不想管理工厂并保留参考。

代理实例有没有办法检索通道关联来处理它?

喜欢 ...

谢谢

0 投票
1 回答
994 浏览

c# - 如何正确关闭通道工厂?

我想知道如何正确关闭 channelFactory。实际上,我正在使用:

但是到 ServiceHost 方面,未处理的异常到达域级别(应用程序的顶层)。我不明白为什么服务主机不捕获异常并使用我配置的 IErrorHandler 处理它。

这就是我配置 ErrorHandler 的方式:

0 投票
1 回答
428 浏览

httpclient - Netty - 使用相同的 channelFactory 导致只处理 3 个响应

我被分配创建一个基于 Netty 的 HTTP 客户端,但我遇到了一些困难,我希望有一个答案。

好吧,为了充分利用 NIO,我想使用同一个 channelFactory,这意味着所有连接都由同一个老板线程处理并分配给同一个工作线程池。

我遇到的问题是,如果我使用 3 名工人,我只能进行 3 次操作,然后流程就会卡住。即使我在处理响应后关闭了通道,似乎工作线程也没有被释放以进行下一次分配......

以下是我如何定义我稍后分配给引导程序的静态 channelFactory:

0 投票
1 回答
1758 浏览

wcf - WCF ChannelFactory IDuplexSessionChannel

我正在使用 aChannelFactory通过发送原始肥皂请求与外部服务进行通信。我有一个使用IDuplexSessionChannel. 我尝试创建一个IRequestChannel/IRequestSessionChannelusing binding.BuildChannelFactory<T>(),但这不起作用(抛出异常)。从我在线阅读的内容来看,双工通道可以像请求通道一样使用,您可以在其中调用服务方法并立即获得响应。我想知道下面的代码是否实现了这一点。ChannelFactory我到处搜索以查看and的示例IDuplexSessionChannel,但找不到任何东西。最后,如果这是一个 IDuplexChannel 而不是 IDuplexSessionChannel,那么实现会有什么不同,因为一个是会话的,另一个不是?

这是我的配置文件:

0 投票
3 回答
1338 浏览

c# - ChannelFactory 与自动生成的代理中的错误处理

我最近开始编写自己的 ChannelFactory 包装器来调用我的 WCF 服务,而不是依赖于 Visual Studio 自动生成的代码

以前,使用自动生成的代理,我可以这样做以进行错误检查:

我应该如何为 ChannelFactor 处理这个问题?如果出现问题,处理和重新创建频道的最佳做法是什么?例如,间歇性网络连接、会话超时等。

这是我的代码目前的样子:

来自 ProxyBase.cs 的片段 - 创建通道

UserManagementServiceClient.cs - IUserManagementService 是 WCF 合同

最后,这就是我在 MVC 项目中的调用方式

所以目前,每当默认的 10 分钟会话结束时,我都会收到错误消息,因为通道已经关闭。

如何强化我的代码,以便处理网络断开/会话超时等问题?

0 投票
2 回答
8723 浏览

wcf - 如何应用任务异步模式和 WCF 的 ChannelFactory?

我们在 2008 年在 .NET 3.5(现在在 .NET 4.0 下重新编译)上构建了一个强大的 WCF 客户端,它通过 net.tcp 绑定与我们自己的 WCF 服务通信。健壮的客户端使用 ChannelFactory<IOurServiceInterface>() 来生成服务代理,我们目前通过它对服务进行同步调用。我们从每次调用中获取结果;我们没有单向电话。

我们正在迁移到 .NET 4.5 / C# 5,并希望使用 async / await / TAP 使客户端异步。如何以产生干净代码和良好运行时性能的方式最好地做到这一点?

(我查看过有关此主题的 MS 文档,但它总是谈论运行 svcutil。我们不使用 svcutil;我们直接使用 ChannelFactory。另外:MS 文档用于在 .NET 4.5 下使用通道工厂异步调用操作未更改自 .NET 3.0 天以来。似乎 ChannelFactory 还没有接受新的异步。)

0 投票
1 回答
1409 浏览

c# - ChannelFactory 会出现故障吗?

假设我正在缓存 aChannelFactory<T>并使用它来创建频道。这些通道用于对其他服务进行 WCF 调用,然后被(安全地)处置。

我是否需要担心缓存ChannelFactory出现故障并因此无法用于创建新通道的情况?如果是这样,我需要用新的替换它ChannelFactory吗?

ChannelFactory对于 a出现故障的情况,我还将欣赏一个可重现的具体示例。

0 投票
1 回答
7235 浏览

wcf - WCF ChannelFactory 和通道 - 缓存、重用、关闭和恢复

我的 WCF 客户端库有以下计划架构:

  • 使用 ChannelFactory 而不是 svcutil 生成的代理,因为我需要更多控制,而且我想将客户端保留在单独的程序集中并避免在我的 WCF 服务更改时重新生成
  • 需要将带有消息检查器的行为应用于我的 WCF 端点,因此每个通道都能够发送自己的身份验证令牌
  • 我的客户端库将从 MVC 前端使用,所以我必须考虑可能的线程问题
  • 我正在使用 .NET 4.5(也许它有一些帮助程序或新方法可以以更好的方式实现 WCF 客户端?)

我已经阅读了许多关于各种不同位的文章,但我仍然对如何以正确的方式将它们组合在一起感到困惑。我有以下问题:

  1. 据我了解,建议将 ChannelFactory 缓存在静态变量中,然后从中获取通道,对吗?
  2. 端点行为是特定于整个 ChannelFactory 还是我可以分别为每个通道应用我的身份验证行为?如果行为特定于整个工厂,这意味着我不能在端点行为对象中保留任何状态信息,因为相同的身份验证令牌将被每个通道重用,但显然我希望每个通道都有自己的身份验证令牌当前用户。这意味着,我必须在我的端点行为中计算令牌(我可以将它保存在 HttpContext 中,我的消息检查器行为只会将它添加到传出消息中)。
  3. 我的客户端类是一次性的(实现 IDispose)。我如何正确处置通道,知道它可能处于任何可能的状态(未打开、打开、失败......)?我只是丢弃它吗?我要中止它然后丢弃吗?我要关闭它(但它可能根本还没有打开)然后丢弃吗?
  4. 如果在使用频道时遇到问题怎么办?是只有通道坏了还是整个 ChannelFactory 坏了?

我猜,一行代码说一千多个单词,所以这是我的代码形式的想法。我已经用“???”标记了我上面的所有问题 在代码中。