问题标签 [wcf-instancing]

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 投票
1 回答
301 浏览

wpf - WPF:如何处理我在运行时实例化的用户控件?

我在我的项目中添加了一个用户控件,如下所示:

“LSliderIn”对象是一个项目控件,“TriplexAmpsControl”是一个用户控件,它具有三个声明为整数的只写属性,名为“AmpsPhaseA”、“AmpsPhaseB”和“AmpsPhaseC”。

如果我如上所述在运行时实例化控件,我可以立即为以下属性之一分配一个值:

但仅限于子程序内。我不知道如何在表单中的其他地方引用控件值,因为如果我尝试从其他子中通过其名称调用控件,编译器自然会告诉我该控件不是项目的一部分,因为它尚未创建。

我在该主题上所能找到的所有内容都涉及在代码隐藏中创建控件,但请注意如何连接到以我的方式实例化的用户控件。

0 投票
1 回答
105 浏览

wcf-instancing - WCF 中的实例化 - 特定于 Mode.PerSession 的查询

我将实例模式用作 PerSession - 如果客户端对给定方法发出多个请求 - o/p 应该按照下面的代码片段 b/c 递增,实例模式是 PerSession,

但是,每次调用我总是将值设为 1,理想情况下它应该递增。

让我知道我错过了什么

提前致谢...

服务器

客户

0 投票
1 回答
197 浏览

wcf - WCF 中基于角色的安全性是否依赖于实例模式?

我们正在使用UserNamePasswordValidator和 将IAuthorizationPolicy自定义角色数据加载到IPrincipal对象中,以在我们的服务器端进行身份验证和一些业务级别的权限。

因此,我们Thread.CurrentPrincipal在我们的服务操作内部使用来测试权限等。冒着比我应该获得更多技术的风险,这是类的一个static属性,Thread这意味着它具有实例范围 全局scoppe(duh,感谢 Thilak)。我InstanceContextMode将来是否应该出于性能原因将我的更改为Single,这个方案肯定会失败?我知道这Single需要您编写线程安全的代码,因此它本身不仅仅是配置更改。

在我需要关注这个问题之前,您是否还可以分享任何指向权威文本的链接,具体说明 WCF 应该能够处理什么样的实例负载?

0 投票
2 回答
1928 浏览

wcf - WCF 实例如何工作

我试图了解 WCF 的实例是如何工作的。我有一个 WCF 服务,其 InstanceContextMode 设置为 PerCall(因此对于每个客户端的每次调用,都会创建一个新实例)和 ConcurrencyMode 设置为 Single(因此服务实例一次只执行一个或不执行操作调用)。

因此,据我所知,当客户端连接时,会创建一个新实例。但是当客户离开服务时会发生什么。实例是否死亡。我问的原因是因为我需要在服务中实现一个 ConcurrentQueue。因此,客户端将连接到服务并放置要处理的大量数据,然后离开服务。工人将排队工作。工作完成后,我需要销毁实例。

0 投票
1 回答
122 浏览

wcf - 在操作之间重用 WCF 服务器实例,无需并发

如何使 WCF 服务器实例(.svc.cs / .svc.vb 文件中的类的实例)在请求之间保持活动状态?

这是一种无状态、只读的服务类型:我可以接受不同的客户端重用同一个实例。但是,它不是线程安全的:我不希望两个线程同时在这个实例上执行一个方法。

理想情况下,我正在寻找的是 WCF 管理这些实例的“工作池”。比如说,10. 新请求进来:获取一个实例,处理请求。请求结束,回到游泳池。已经有 10 个并发请求在运行?暂停 11 号,直到有新的工人空闲。

我/不/想要的是每个客户端的会话。这些实例的启动成本很高,我不想每次新客户端连接时都这样做。

我不想要的另一件事:处理这个客户端。这不是客户端的责任,它应该对服务器的实现一无所知。我不能总是控制它。

我对 MSDN 文档中不熟悉的术语有点迷失了。我有很多工作要做,但这个泳池系统我似乎无法正确。

我是否必须创建一个静态池并自己管理它?

谢谢

PS:让我感到困惑的是,这方面的几乎所有内容都指向绑定的配置。像 basicHttp 或 wsHttp。但这听起来不对:这应该在更高的层次上,与绑定无关:这是关于工人经理的。或不?

0 投票
1 回答
284 浏览

c# - ReaderWriterLock 在 ServiceBehavior 构造函数中不起作用

我有 WCF 服务 where InstanceContextModeisSingleConcurrencyModeis Multiple。目的是在实例化时创建值的缓存,而不会阻止其他不依赖于缓存创建的服务调用。

这样,只有尝试获得读取锁定的方法才_classificationsCacheLock需要等待,直到classificationsCache填充 ( classificationsCacheLock.IsWriterLockHeld = false) 的值。

然而问题是,尽管在任务线程中获得了写锁,调用 WCF 继续服务以响应对服务方法的调用,GetFOIRequestClassificationsList()结果_classificationsCacheLock.IsWriterLockHeldfalse,当它应该为真时。

这是WCF实例化的奇怪行为还是我从根本上错过了一个技巧。

我尝试在构造函数的线程上下文(安全选项)和生成的任务线程的上下文中获取写锁(这可能会在调用函数调用比调用调用更快)之间引入竞争,WCFGetFOIRequestClassificationsList()两者classificationsCacheLock.AcquireWriterLock(Timeout.Infinite);都导致classificationsCacheLock.IsWriterLockHeld尽管false通过使用 thread.sleep 阻止了任何竞争条件,但在每个相应线程的代码块中适当地交错分开。

编辑 1

由于许多建议是围绕线程池中的不确定性以及任务如何处理线程亲和性,我更改了方法以显式生成一个新线程

结果还是一样。分类CacheLock.AcquireReaderLock 不会像它看起来应该的那样等待/阻塞。

我还添加了一些诊断程序来检查是否;

  • 该线程实际上是同一个线程,您不能期望 R/W 阻塞同一个线程
  • _classificationsCacheLock 的实例始终相同

    公共 GetFOIRequestClassificationsList_Response GetFOIRequestClassificationsList() { 尝试 {

    /li>

结果是..

..按照这个顺序,现在我们有一个预期的竞争条件,因为在新创建的线程中获得了写锁。实际的WCF服务调用是在构造函数的派生线程被安排实际运行之前进行的。所以我搬家

到构造函数,因为这保证在访问任何类字段之前执行。

尽管有证据表明构造函数是在与执行服务方法的线程不同WCF的线程上初始化的,但 AcquireWriterLock 仍然没有阻塞。WCF

同样 AcquireWriterLock 不会阻塞并允许分配空引用分类缓存。

结果是..

编辑 2

创建了没有源代码控制的解决方案副本。

如果您想解决这个问题,请在此处上传。

更改为在代码中使用手动重置事件进行演示,并注释掉问题代码。

MRE 有效,ReaderWriterLock 无法按预期工作。

.net 4.0 - C#

0 投票
1 回答
113 浏览

wcf - WCF 服务 API 设计

我是 WCF 的新手。我正在设计一个基于 WCF/WPF 的 ERP 系统,它具有以下模块:

a) 估计
b) 计划
c) 计划
d) 会计
e) 库存

我有以下问题:

  1. 我应该选择哪种实例化模式?该应用程序将托管在 Intranet 上的单独可执行文件上。对于每个模块,将有大约 500-1000 个并发用户连接到服务器。所有客户端都通过 TCP/IP 连接。使用的数据库是 SQL Server。

  2. 如何设计我的服务 API?我应该公开一组最小的标准操作,还是应该公开大量特定于问题集的函数?更准确地说,您认为以下哪一项是要走的路?

    或者

    /li>

我正在寻找这两种方法之间的权衡。

先谢谢大家了。。

普拉迪普

0 投票
1 回答
103 浏览

c# - 每次调用实例模式的 WCF 身份验证

我正在开发一个基于 WCF 的 ERP 应用程序。我的服务使用 Per Call 实例模式和并发模式 Multiple。
我正在使用自定义用户名/密码验证器进行身份验证。由于对于 Per Call 服务,服务实例是为每个调用创建的,我不确定如何处理身份验证。

在每个服务请求中发送用户名和密码并在服务器端进行验证是正确的方法吗?
如果是这样,在客户端,我们是否应该存储用户输入的用户名和密码?

如果有更好的基于用户名/密码的身份验证方法,请告诉我。

0 投票
0 回答
11 浏览

concurrency - WFC 服务客户端调用实例化和并发

在此先感谢您的帮助。我阅读了几篇关于并发、实例化和线程安全的文章,但我承认我仍然有疑问。事实上,文章中的信息有时是相互矛盾的。

我有一个简单的 WFC 服务,它接收一个日期期间(StartDate 和 EndDate)。该服务必须在 StartDate 和 EndDate 定义的时间段内搜索名称中包含日期的文件。然后将创建的文件压缩并上传到服务器。

经过多次测试后,我从未注意到该服务的运行有任何问题。但是在生产环境中使用该服务之前,我需要确保服务代码是安全的,以确保来自客户端的多个同时请求不会影响其他请求的数据完整性。

我发布了一个代码片段,并在代码中添加了评论/问题。

请注意,我已将服务 Instancing 设置为 PerCall。正如我在 microsoft 文档中注意到的那样,“在 PerCall 实例中,并发性是不相关的,因为每条消息都由一个新的服务实例处理。”。但是每个服务实例本身都是线程安全的吗?换句话说,每个客户端调用服务不能改变其他调用的数据?

国王问候。坎波斯