问题标签 [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 回答
7636 浏览

performance - ASP.NET 客户端应用程序中的 WCF ChannelFactory 和 Channel 缓存

我正在构建一系列将由多个应用程序使用的 WCF 服务。因此,我正在尝试定义一个通用库来访问 WCF 服务。

知道不同用户发出的每个服务请求都应该使用不同的通道,我正在考虑缓存每个请求的通道(HttpContext.Current.Items)并缓存用于为每个应用程序创建通道的 ChannelFactory(HttpApplication.Items),因为我可以使用一样ChannelFactory

但是,在关闭 ChannelFactory 和 Channel 时,我对这种缓存机制有疑问。

  1. 我是否需要在使用通道后、请求结束时关闭通道,或者当该请求的上下文消失时是否可以将其关闭(?)?
  2. 通道工厂呢?由于每个通道都与创建它的 ChannelFactory 相关联,因此在应用程序进程(AppDomain)的生命周期中保持相同的 ChannelFactory 是否安全?

这是我用来管理这个的代码:

谢谢!

0 投票
1 回答
18095 浏览

wcf - WCF,ChannelFactory,“找不到端点元素...”

我正在尝试从另一个服务中调用 WCF 服务,部分使用我在 StackOverflow 上找到的实现ChannelFactory的示例。

我在我的测试解决方案中创建了一个单独的控制台应用程序项目(VS 2008,顺便说一句),

这是来自本地服务的App.Config显示端点:

这是来自测试项目自己的App.Config

这是我在本地服务中公开的方法,它反过来将请求对象传递给远程服务:

我收到的错误是这样的:

在 ServiceModel 客户端配置部分中找不到名为“ ServiceSoap ”和合同“ ServiceReference.ServiceSoap ”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。


我很困惑,我到底在哪里缺少端点元素,在本地服务的 app.config(定义了指向远程服务的服务引用)、测试应用程序的 app.config 或其他地方? !


更新:阅读此 MSDN 文章后,我找到了一种解决方法,或者我猜只是实例化 ChannelFactory 的另一种方式:

我没有尝试从 app.config 中不存在或不正确的信息中获取信息,而是手动插入绑定 (BasicHttpBinding) 的值和远程服务的地址。这似乎让我摆脱了“找不到端点元素”错误,但我不确定这是否是最佳解决方案。

0 投票
2 回答
4687 浏览

c# - WCF ChannelFactory 状态属性

ChannelFactory 拥有 State 属性意味着什么?我了解创建的频道可以具有基于连接的状态。但是我很困惑为什么 ChannelFactory 也有这样的连接状态。它是否也连接到 WCF 服务?

0 投票
2 回答
3198 浏览

wcf - WCF ChannelFactory 缓存

我刚刚阅读了 Wenlong Dong 的这篇关于 WCF ChannelFactory 缓存的精彩文章。

我的问题很简单,你怎么能证明 ChannelFactory 实际上是在调用之间被缓存的?我遵循了有关 ClientBase 构造函数的规则。我们在继承自 ClientBase 的对象上使用以下重载构造函数:

ClientBase(string endpointConfigurationName, EndpointAddress remoteAddress);

在上面提到的文章中指出:

对于这些构造函数,所有参数(包括默认参数)都在以下列表中:

· InstanceContext 回调实例

· 字符串端点配置名称

· 端点地址远程地址

只要在构造 ClientBase 时这三个参数相同,我们就可以放心地假设可以使用相同的 ChannelFactory。幸运的是,String 和 EndpointAddress 类型是不可变的,也就是说,我们可以通过简单的比较来确定两个参数是否相同。对于 InstanceContext,我们可以使用 Object 引用比较。EndpointTrait 类型因此被用作 MRU 缓存的键。

为了测试 ChannelFactory 缓存理论,我们正在检查 ClientBase 构造函数中的哈希码,例如 var testHash = RuntimeHelpers.GetHashCode(base.ChannelFactory);

调用之间的哈希值不同,这使我们认为 ChannelFactory 实际上没有被缓存。

有什么想法吗?

问候

迈尔斯

0 投票
1 回答
878 浏览

asp.net - 缓存 WCF 代理?

我正在尝试使用 Channel Factory 并将其缓存在我的 asp.net mvc 中。我正在使用 PerSession Instance 模式,因为我需要知道状态。因此,我无法立即关闭代理。而且我不想每次都重新打开,关闭代理。如果我让代理处于打开状态,它会在第 12 次超时。我可以增加并发会话超时,但我想知道这是否是正确的方法。我是 WCF 的新手,如果我的问题很愚蠢,请原谅。-提前感谢普拉特

0 投票
3 回答
10894 浏览

wcf - 创建单例 ChannelFactory并重用于客户端连接

在我们的 SharePoint/ASP.NET 环境中,我们有一系列数据检索器类,它们都派生自一个通用接口。我被分配了创建一个数据检索器的任务,该检索器可以使用 WCF 与其他 SharePoint 场进行远程通信。我目前实现它的方式ChannelFactory<T>是在静态构造函数中创建一个单例,然后由远程数据检索器的每个实例重用以创建一个单独的代理实例。我认为这会很好用,因为ChannelFactory只有在应用程序域中实例化一次,并且它的创建保证是线程安全的。我的代码看起来像这样:

我的问题是,这是一个好的设计吗?我认为一旦ChannelFactory创建了我就不需要担心线程安全,因为我只是用它来调用CreateChannel()但我错了吗?它是在改变状态还是在幕后做一些可能导致线程问题的时髦的事情?此外,我是否需要将一些代码放在某个地方(静态终结器?)手动处理,ChannelFactory或者我可以假设每当 IIS 重新启动时,它都会为我完成所有清理工作?

相关:ChannelFactory 重用策略

0 投票
4 回答
5111 浏览

wcf - 直接通道使用与使用代理?

正如标题所暗示的那样,我试图了解为什么在 WCF 中人们有时会选择“生成代理”而不是使用 ChannelFactory 手动创建新的通道实例。我已经看过每个例子,但还没有真正找到任何解释为什么你会选择一个与另一个。

老实说,我只使用过频道和ChannelFactory<T>我继承的代码,即:

那么我为什么要“生成代理”呢?有什么好处和坏处?

0 投票
3 回答
19694 浏览

wcf - ChannelFactory Credentials + 对象是只读的

问候,当我尝试为我的工厂设置凭据时出现以下问题:

我得到一个对象是只读的异常。当我想设置用户名时会发生这种情况。

0 投票
6 回答
6623 浏览

.net - 从 WCF REST 获取错误详细信息

我有一个 .Net WCF 客户端使用的 REST 服务。

当遇到错误时,REST 服务会返回一个 HTTP 400 错误请求,其响应正文包含 JSON 序列化详细信息。

如果我使用 Fiddler、Javascript 或直接从 C# 执行请求,我可以在发生错误时轻松访问响应正文。

但是,我正在使用ChannelFactory具有 6 个非常复杂的接口的 WCF。这个代理抛出的异常总是 a ProtocolException,没有有用的细节。

当我收到此错误时,有什么方法可以获取响应正文?


更新

我意识到使用 .Net 有很多不同的方法可以做到这一点,并且还有其他方法可以获得错误响应。他们很有用,但不回答这个问题。

我们正在使用的 REST 服务会发生变化,并且当它们发生变化时,复杂的接口会得到更新。与新接口一起使用ChannelFactory意味着我们将获得编译时(而不是运行时)异常,并使这些更容易维护和更新代码。

使用 WCF 通道时,有什么方法可以获取错误 HTTP 状态的响应正文?

0 投票
0 回答
175 浏览

asp.net-mvc - 我应该何时打开和关闭网站的缓存 WCF 代理?

我浏览了 StackOverflow 上与缓存 WCF 代理以供重用有关的其他文章,并且我已经阅读了这篇文章,解释了为什么我应该在调用任何东西之前显式打开代理。我对最佳实施细节仍然有些模糊。

我的问题是:我应该什么时候打开和关闭网站上的服务调用代理,它们的生命周期应该是多少(每个调用、每个请求或每个 Web 应用程序)?我们目前不打算利用缓存的安全上下文(但这不是不可预见的)。

谢谢!