- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 WCF 服务,我用它来替换旧的 ASP.NET Web 服务。该服务似乎工作正常,但由于某种原因它无法处理并发请求。我的服务实现具有以下属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class HHService : IHHService
我的主机声明如下所示:
baseAddress = new Uri("http://0.0.0.0:8888/HandHeld/");
host = new ServiceHost(typeof(HHService), baseAddress);
ServiceMetadataBehavior behavior;
behavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (behavior == null)
{
behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(behavior);
}
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
host.AddServiceEndpoint(typeof(IHHService), new BasicHttpBinding(), "HHService.asmx");
HHService.LogMessage += new EventHandler<HHService.LogMessageEventArgs>(HHService_LogMessage);
host.Open();
该服务运行并返回正确的结果,但如果两个客户端尝试同时进行调用,一个客户端将阻塞直到另一个客户端完成,而不是调用一起执行。我没有使用任何配置文件。我正在尝试以编程方式完成所有事情。我是否设置不正确导致了这种行为?我已经使用 NetTCPBinding 运行其他服务而没有出现此问题。
编辑:回应约翰·桑德斯:我不熟悉任何 ASP.NET 兼容模式。我没有使用任何 session 状态服务是无状态的它只是处理请求。除了实际方法的实现之外,我所做的所有其他事情都在此处列出的代码中。
可能的解决方案:
我从主窗体的 form_load 事件调用 host.Open()
函数。我将调用移至单独的线程。此线程所做的只是调用 host.Open()
,但现在该服务的行为似乎符合我的预期。
最佳答案
如果您的实例上下文模式是 PerCall,那么您的服务器始终是单线程的,因为根据定义,每次调用都会获得一个新的服务器实例。
这在 IIS 环境中工作正常,其中 IIS 可以启动多个服务器实例来处理 n 个并发调用者,每个调用者作为每个传入请求的单线程服务器。
您在一条评论中提到您在表单应用程序中托管 WCF - 这可能是您需要重新考虑的设计决定 - 这并不是真正的最佳选择,因为 Winforms 应用程序无法轻松处理多个调用者并启动多个实例服务代码。
马克
关于c# - 为什么我的 Winforms 托管的 WCF 服务是单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1007279/
此代码似乎在启用优化的广泛使用的编译器上中断,尽管它在 Visual Studio 中运行良好。 struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
我想要一个图表,其中有一个单线箭头,如下所示: 1 2 3 4 5 或者像这样(其中/假设是一个箭头:)): \/ -----------------
我正在为 Java 编写自定义规则。有两个 Tree.KIND 实例(STRING_LITERAL 和 ASSIGNMENT)需要捕获。有一个特定的行,字符串文字和赋值的逻辑都会引发问题。但 Sona
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
很多时候我使用了这个命令,它在当前目录打开了一个临时的 HTTP 服务器: python3 -m http.server 现在我需要接收文件,有没有打开ftp服务器的一行命令? 我只是在寻找一个命令行
相关主题 std::unique_ptr, deleters and the Win32 API 要将 Win32 句柄用作 RAII,我可以使用以下行 std::unique_ptr::type,
我认为必须有一个单行 Guava 解决方案来将一个不可变列表转换为另一个不可变列表,但我找不到它。假设我们有以下对象: ImmutableList input = ImmutableList.of("
我有以下 Highcharts ( http://www.highcharts.com ) 散点图。请注意,轴从 -10 开始,到 10 停止,中间为 0。我希望每条 0 线的宽度或颜色都与其他线不同
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并后的音频文件。输出视频文件的长度将与实际视频文件的大小相同。 是否有单行 FFMPEG 命
我在 python3 类中有 2 个列表: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys) == len(se
我有一个不同长度的数组列表,我想将它们组合成一个最大维度的矩阵,并在末尾填充零。例如(伪代码): combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] 这是我目前的解决
例如,给定 i=5 和 n=8,我想生成 [0;0;0;0;1;0; 0;0]。具体来说,我想生成向量 v 以便: v = zeros(n,1); v(i) = 1; 有没有一种(合理的)方法可以在一
我是一名优秀的程序员,十分优秀!