问题标签 [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.
.net - 使用通道工厂创建具有不同凭据的通道
我正在使用该ChannelFactory<T>
类型在 WCF Web 服务中创建通道WsHttpBinding
,并且该服务使用用户名/密码组合进行身份验证。虽然我使用我的自定义验证器进行身份验证,但我在创建具有不同凭据的通道时遇到了困难。
考虑到创建的开销ChannelFactory<T>
,我试图缓存它的单个实例并共享它,以便在我的应用程序的整个生命周期内创建多个通道。不幸的是,凭据似乎直接与工厂绑定,并且在创建通道后无法更改。
换句话说,如果我尝试这个:
我收到一个异常,告诉我该UserName
属性现在是只读的。
是否可以在这里实现任何类型的缓存,或者我基本上必须ChannelFactory
为每个用户名缓存一个实例?
wcf - WCF 服务和 IIS 是如何集成的,传入请求的架构和流程是什么
我最近一直在技术上测试 WCF 服务,并且已经到了这样的地步,我缺乏理解使我无法继续前进并找到解决我们看到的超时问题的方法。
我们正在对 Windows Server 2008 上的 IIS7 上托管的 WCF 服务进行负载测试。设置为触发消息的系统实际上会在 biztalk 应用程序上触发它们。Biztalk 然后处理消息并将它们发送到 WCF 服务的端点。WCF 服务也在其应用程序池中使用 .net 2.0(我想这意味着它实际上可能是 3.0 或 3.5,因为它们不是完整版本?
我们在一秒钟内发出 40 条消息,其中 90% 的消息由于客户端的发送超时(biztalk)而超时。起初我们认为这很奇怪,因为我们希望服务器的基本 http 绑定接收超时首先触发,但结果是设置为 10 分钟,客户端发送超时设置为 1 分钟和 30 秒。
我的理解:
WCF 服务具有配置文件,其中包含行为和 http 绑定。我们向其发送 XML 消息的服务器端点使用 BasicHtppBindings:Timeouts:Open/Close 为 1 分钟,发送和接收为 10 分钟。目前我们所知道的服务器超时时间是:sendtimeout: 1 分钟。
我了解 WCF 的架构通过创建通道工厂或服务主机的实例来工作,并创建一个通道堆栈,其中包含配置中的行为和绑定设置作为通道。有一个 TransportAdaptor,用于在 xml 消息通过通道堆栈处理后移动它。
我从 IIS 了解到 http.sys 处理传入的请求。它将请求传递给工作进程,当它很忙时,它将请求放入内核模式队列?我了解可以设置一些 machine.config 设置来增加此队列/限制此队列?
我也知道如何将应用程序池变成网络花园,并且我已经阅读过您可以增加每个核心的线程数,默认为 12;这是通过注册表设置或稍后在 .net 中更改 Web 配置来完成的。
我刚刚阅读了 InstanceContextMode 以及它如何影响服务器的服务......但我不确定在这种情况下设置为什么。
我们记录了一些性能计数器,.net 计数器,我注意到当前请求数减去(排队+断开)= 12。这表明我们使用的是 1 个核心?并且该内核上的线程数设置为 12。
任何人都可以帮助我获得更清晰的画面,并帮助我将一些额外的知识拼凑成更完整的东西吗?
c# - WCF 通道和 ChannelFactory 缓存
所以我决定在我的 WCF 应用程序中提高一点性能,并尝试缓存 Channels 和 ChannelFactory。在开始之前,我有两个关于这一切的问题需要弄清楚。
1) ChannelFactory 是否应该实现为单例?
2)我有点不确定如何缓存/重用各个频道。你有什么例子可以分享吗?
值得注意的是,我的 WCF 服务被部署为一个独立的应用程序,只有一个端点。
编辑:
感谢您的回复。不过我还有几个问题...
1)我想我对应该在哪里进行缓存感到困惑。我正在向我们公司的另一个部门提供使用此代码的客户端 API。这种缓存是否发生在客户端上?
2) 客户端 API 将用作 Silverlight 应用程序的一部分,这会改变什么吗?特别是,在这种情况下有哪些缓存机制可用?
3)我还不清楚GetChannelFactory方法的设计。如果我只有一项服务,是否应该只创建和缓存一个 ChannelFactory?
我仍然没有实现任何缓存功能(因为我完全不知道应该如何完成它!),但这是我到目前为止的客户端代理:
c# - 在不同的模块中解析时,Unity 无法解析类型
我目前正在使用统一容器和 WCF 服务开发 PRISM 应用程序。在模块中(使用 WCF 代理),我为 WCF 客户端注册了一个 ChannelFactory,如下所示:
现在,一切正常,所以我决定在另一个模块中使用这个 ChannelFactory。这是模块的 Initialize 方法:
所以这个代码和其他模块的代码完全一样,只是缺少注册。
运行此程序时,出现以下异常:
这似乎是 ChannelFactory 的解析和 Ctors 的问题,但是为什么统一可以在第一个模块中解析工厂而不是在这个模块中呢?
我也不明白这个异常消息,因为我认为在注册中调用了一个特定的 Ctor:
有任何想法吗?
wcf - WCF ChannelFactory 和连接超时的最佳实践
我正在开发一个 winform 应用程序,该应用程序将访问作为 Windows 服务自托管的 WCF 服务。我使用的是 ChannelFactory 而不是服务参考。我已经成功连接和调用了WCF服务。问题是当我让应用程序保持空闲 20 分钟,然后尝试拨打另一个电话时。我收到以下错误:
“套接字连接被中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或底层网络资源问题造成的。本地套接字超时为 '00:00:59.9489970'。”
我正在寻找管理连接的最佳实践。我目前创建了一个名为 PrepareWCFConnection(见下文)的函数,用于检查通道和 ChannelFactory 的状态。在对 WCF 服务进行任何调用之前,我会调用此方法。有没有更好的方法来处理这个?
c# - ChannelFactory 的反面是什么.创建频道?
我只是按照本教程操作并使用了一些代码。我几乎可以肯定我在某处读到该频道有超时,因此它最终可能会自动关闭。所以我尝试简单地在我的客户端中为我想要调用的每个方法打开一个新通道,最终(在多次调用之后)我得到了错误。
似乎我可以同时打开多少个频道是有限制的。但是由于通道是自定义对象的一个实例,我不知道如何关闭它或杀死它,或者我需要用它做什么来摆脱它,这样我就可以创建其他通道。
然后我注意到我应该实现的CreateChannel
文档(我上面链接的教程没有这样做)。那么,这是我关闭频道的方式吗?如果是这样,我将如何关闭它或者我应该如何执行该方法?如果我必须实现接口,我应该如何实现所有其他方法?TChannel
IChannel
Close
或者我应该只使用一个频道,只要它持续存在?无论如何,如果我所拥有的只是我自己的类的一个实例,我应该如何知道是错误的、打开的还是关闭的?
正如你所看到的,我对这个主题很迷茫,所以我希望你能指出我正确的方向。
c# - ChannelFactory 最大连接池
我正在创建一个测试工具来压力加载服务器。我创建了许多不同的线程,它们向服务器发送单独的请求。它似乎受到ChannelFactory的限制。它是进行实际服务调用的瓶颈,例如:
我尝试了几种不同的方法:
- 使用所有线程共享的单个静态 ChannelFactory
- 每个线程创建一个新的通道工厂
- 每次调用创建一个新的通道工厂
所有这些导致相当相似的性能。似乎有一个通道工厂正在使用的可用连接的全局静态池。我试过查找这个但找不到任何东西。你会知道更多吗?你认为我猜测有一个静态连接池是正确的吗?如果是这样,您知道如何配置吗?
这是测试应用程序的当前配置:
c# - 我如何调用 ChannelFactory动态的?
我得打电话ChannelFactory<TChannel>
上课。但是下面的代码是针对ChannelFactory
Class 的。我不知道如何打电话ChannelFactory<TChannel>
。请建议我如何称呼这ChannelFactory<TChannel>
门课。
c# - 端点为空?
我收到以下错误:
ChannelFactory.Endpoint 上的 Address 属性为空。ChannelFactory 的端点必须具有指定的有效地址
但是我有一个客户端端点的地址,这是怎么回事?
代码:
客户:
服务器:
wcf - 任何用于频道管理的 WCF 客户端代理生成器?
你会推荐哪个最好的 ChannelFactory 包装器?我正在寻找一种简单的方法来处理频道创建过程并在需要时重新打开。