0

私はWCFで非常に新しいです。wcf のコードと記事をよく見てください。多くのコードを見た後、私はしばしば非常に基本的なことに固執し、以下の質問についての詳細な議論を得ることができませんでした. ここに私のいくつかの基本的な質問があります....そして、サンプルの状況とサンプルコードを使用した詳細な議論を探しています。

ConcurrencyMode とは何ですか?? 実際に ConcurrencyMode は何をしますか.....それは何を決定しますか?? 利用可能な ConcurrencyMode はほとんどなく、それらは Multiple、Reentrant、Single です

どのような状況でどの同時モードを使用する必要があるか。最良の選択は何でしょう。ありがとう

4

1 に答える 1

0

必要なものによって異なります。アプリケーションの存続期間中にサービスのインスタンスを 1 つだけインスタンス化する必要がある場合は、singleを使用することをお勧めします。たとえば、そのサービスのインスタンス化が何らかの理由で非常に高価であり、頻繁に呼び出されないため、複数のスレッドが同時にヒットすることを心配していない場合に、これを行うことができます。

    [ServiceBehavior(Namespace = "http://somenamespace", InstanceContextMode = InstanceContextMode.Single)]
public sealed class ServiceWithExpensiveDictionary : IServiceWithExpensiveDictionary, IDisposable
{
    private DataCacheFactory factory;
    private ConcurrentDictionary<string, DataCache> dataCacheDictionary;

    /// <summary>
    /// Constructor
    /// </summary>
    public ServiceWithExpensiveDictionary()
    {
        factory = new DataCacheFactory();

        dataCacheDictionary = new ConcurrentDictionary<string,DataCache>();
    }

上記のコードでは、ConcurrentDictionary インスタンスに高価なオブジェクトを配置しているため、サービスのすべての呼び出し元に対して ConcurrentDictionary インスタンスを使用したいと考えています。

ユーザーが API とステートフルで長時間の会話を行うことを意図している場合は、 sessionを使用できます。

サービスがステートレスで、サービスのインスタンス化が低コストである場合は、呼び出しごとに使用できます。

それは本当にあなたが何をしたいかによって異なります。

ここにこれに関連する良い質問もあります。また、あなたが興味を持っているかもしれないスロットリングにも触れています:-

WCF ConcurrencyMode Single および InstanceContextMode PerCall

于 2013-01-03T12:03:07.267 に答える