问题标签 [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.
performance - ASP.NET 客户端应用程序中的 WCF ChannelFactory 和 Channel 缓存
我正在构建一系列将由多个应用程序使用的 WCF 服务。因此,我正在尝试定义一个通用库来访问 WCF 服务。
知道不同用户发出的每个服务请求都应该使用不同的通道,我正在考虑缓存每个请求的通道(HttpContext.Current.Items
)并缓存用于为每个应用程序创建通道的 ChannelFactory(HttpApplication.Items
),因为我可以使用一样ChannelFactory
。
但是,在关闭 ChannelFactory 和 Channel 时,我对这种缓存机制有疑问。
- 我是否需要在使用通道后、请求结束时关闭通道,或者当该请求的上下文消失时是否可以将其关闭(?)?
- 通道工厂呢?由于每个通道都与创建它的 ChannelFactory 相关联,因此在应用程序进程(AppDomain)的生命周期中保持相同的 ChannelFactory 是否安全?
这是我用来管理这个的代码:
谢谢!
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) 的值和远程服务的地址。这似乎让我摆脱了“找不到端点元素”错误,但我不确定这是否是最佳解决方案。
c# - WCF ChannelFactory 状态属性
ChannelFactory 拥有 State 属性意味着什么?我了解创建的频道可以具有基于连接的状态。但是我很困惑为什么 ChannelFactory 也有这样的连接状态。它是否也连接到 WCF 服务?
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 实际上没有被缓存。
有什么想法吗?
问候
迈尔斯
asp.net - 缓存 WCF 代理?
我正在尝试使用 Channel Factory 并将其缓存在我的 asp.net mvc 中。我正在使用 PerSession Instance 模式,因为我需要知道状态。因此,我无法立即关闭代理。而且我不想每次都重新打开,关闭代理。如果我让代理处于打开状态,它会在第 12 次超时。我可以增加并发会话超时,但我想知道这是否是正确的方法。我是 WCF 的新手,如果我的问题很愚蠢,请原谅。-提前感谢普拉特
wcf - 创建单例 ChannelFactory并重用于客户端连接
在我们的 SharePoint/ASP.NET 环境中,我们有一系列数据检索器类,它们都派生自一个通用接口。我被分配了创建一个数据检索器的任务,该检索器可以使用 WCF 与其他 SharePoint 场进行远程通信。我目前实现它的方式ChannelFactory<T>
是在静态构造函数中创建一个单例,然后由远程数据检索器的每个实例重用以创建一个单独的代理实例。我认为这会很好用,因为ChannelFactory
只有在应用程序域中实例化一次,并且它的创建保证是线程安全的。我的代码看起来像这样:
我的问题是,这是一个好的设计吗?我认为一旦ChannelFactory
创建了我就不需要担心线程安全,因为我只是用它来调用CreateChannel()
但我错了吗?它是在改变状态还是在幕后做一些可能导致线程问题的时髦的事情?此外,我是否需要将一些代码放在某个地方(静态终结器?)手动处理,ChannelFactory
或者我可以假设每当 IIS 重新启动时,它都会为我完成所有清理工作?
wcf - 直接通道使用与使用代理?
正如标题所暗示的那样,我试图了解为什么在 WCF 中人们有时会选择“生成代理”而不是使用 ChannelFactory 手动创建新的通道实例。我已经看过每个例子,但还没有真正找到任何解释为什么你会选择一个与另一个。
老实说,我只使用过频道和ChannelFactory<T>
我继承的代码,即:
那么我为什么要“生成代理”呢?有什么好处和坏处?
wcf - ChannelFactory Credentials + 对象是只读的
问候,当我尝试为我的工厂设置凭据时出现以下问题:
我得到一个对象是只读的异常。当我想设置用户名时会发生这种情况。
.net - 从 WCF REST 获取错误详细信息
我有一个 .Net WCF 客户端使用的 REST 服务。
当遇到错误时,REST 服务会返回一个 HTTP 400 错误请求,其响应正文包含 JSON 序列化详细信息。
如果我使用 Fiddler、Javascript 或直接从 C# 执行请求,我可以在发生错误时轻松访问响应正文。
但是,我正在使用ChannelFactory
具有 6 个非常复杂的接口的 WCF。这个代理抛出的异常总是 a ProtocolException
,没有有用的细节。
当我收到此错误时,有什么方法可以获取响应正文?
更新
我意识到使用 .Net 有很多不同的方法可以做到这一点,并且还有其他方法可以获得错误响应。他们很有用,但不回答这个问题。
我们正在使用的 REST 服务会发生变化,并且当它们发生变化时,复杂的接口会得到更新。与新接口一起使用ChannelFactory
意味着我们将获得编译时(而不是运行时)异常,并使这些更容易维护和更新代码。
使用 WCF 通道时,有什么方法可以获取错误 HTTP 状态的响应正文?
asp.net-mvc - 我应该何时打开和关闭网站的缓存 WCF 代理?
我浏览了 StackOverflow 上与缓存 WCF 代理以供重用有关的其他文章,并且我已经阅读了这篇文章,解释了为什么我应该在调用任何东西之前显式打开代理。我对最佳实施细节仍然有些模糊。
我的问题是:我应该什么时候打开和关闭网站上的服务调用代理,它们的生命周期应该是多少(每个调用、每个请求或每个 Web 应用程序)?我们目前不打算利用缓存的安全上下文(但这不是不可预见的)。
谢谢!