5
WCF用のRESTサービスを実装しました。このサービスは、多くのクライアントから呼び出すことができる1つの機能を提供し、この機能は完了するまでに1分以上かかります。だから私が望んでいたのは、各クライアントに対して、新しいオブジェクトが使用されるため、一度に多くのクライアントを処理できるということです。WCF RESTサービス:InstanceContextMode.PerCallが機能しない
私のインターフェースは次のようになります。
[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);
}
}
ありがとう!
どのようにクライアントの要求を生み出していますか?その上にいくつかのコードを表示できますか?質問を編集して詳細を追加することができます。 – Jeroen
クライアント側のコードを追加しました。 – Cleo
サービスが共有リソースを使用していない場合は、ServiceBehaviorをConcurrency MultipleでSingleに変更できます。これにより、1つのService Instanceが提供されます。これはマルチスレッドです(呼び出しごとに1つのスレッド)。 '[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single、ConcurrencyMode = ConcurrencyMode.Multiple)] ' – JanW