gpt4 book ai didi

WCF REST 服务 : InstanceContextMode. PerCall 不工作

转载 作者:行者123 更新时间:2023-12-04 21:47:12 29 4
gpt4 key购买 nike

我已经为 WCF 实现了一个 REST 服务。该服务提供了一个可以被多个客户端调用的函数,这个函数需要 1 分钟以上才能完成。所以我想要的是,对于每个客户端,使用一个新对象,以便一次处理多个客户端。

我的界面是这样的:

[ServiceContract]
public interface ISimulatorControlServices
{
[WebGet]
[OperationContract]
string DoSomething(string xml);
}

以及它的(测试)实现:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall]
public class SimulatorControlService : SimulatorServiceInterfaces.ISimulatorControlServices
{
public SimulatorControlService()
{
Console.WriteLine("SimulatorControlService started.");
}

public string DoSomething(string xml)
{
System.Threading.Thread.Sleep(2000);
return "blub";
}
}

现在的问题是:如果我使用一个创建 10 个(或任何数量)线程的客户端,每个线程都调用服务,它们不会同时运行。这意味着,调用正在一个接一个地处理。有人知道为什么会这样吗?

补充:客户端代码

生成线程:
        for (int i = 0; i < 5; i++)
{
Thread thread = new Thread(new ThreadStart(DoSomethingTest));
thread.Start();
}

方法:
  private static void DoSomethingTest()
{
try
{
using (ChannelFactory<ISimulatorControlServices> cf = new ChannelFactory<ISimulatorControlServices>(new WebHttpBinding(), "http://localhost:9002/bla/SimulatorControlService"))
{
cf.Endpoint.Behaviors.Add(new WebHttpBehavior());

ISimulatorControlServices channel = cf.CreateChannel();

string s;

int threadID = Thread.CurrentThread.ManagedThreadId;

Console.WriteLine("Thread {0} calling DoSomething()...", threadID);

string testXml = "test";

s = channel.StartPressureMapping(testXml);

Console.WriteLine("Thread {0} finished with reponse: {1}", threadID, s);
}

}
catch (CommunicationException cex)
{
Console.WriteLine("A communication exception occurred: {0}", cex.Message);
}
}

提前致谢!

最佳答案

由于服务是由 GUI 控制的,因此需要“UseSynchronizationContext”属性来解决问题:

  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)] 

关于WCF REST 服务 : InstanceContextMode. PerCall 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529724/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com