我有一个 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 兼容模式。我没有使用任何会话状态,该服务是无状态的,它只是处理请求。除了实际方法的实现之外,我所做的其他一切都在此处列出的代码中。
可能的解决方案:
host.Open()
我从主窗体的 form_load 事件调用该函数。我将调用移至单独的线程。这个线程所做的只是调用host.Open()
,但现在该服务的行为似乎与我预期的一样。