「OperationContractAttribute」 + WCFの「asyncpattern」プロパティの使用は何ですか?

StackOverflow https://stackoverflow.com/questions/2377112

  •  24-09-2019
  •  | 
  •  

質問

したがって、使用されているAJAX有効化WCFサービスの場合、DBからレコードを取得し、使用せずにクライアントに表示します AsyncPattern の財産 OperationContractAttribute....

  • いつ考えるべきですか AsyncPattern 財産?

私の操作手法のサンプル、

[OperationContract]
 public string GetDesignationData()
    {
        DataSet dt = GetDesignationViewData();
        return GetJSONString(dt.Tables[0]);
    }
    public string GetJSONString(DataTable Dt)
    {
        string[] StrDc = new string[Dt.Columns.Count];
        string HeadStr = string.Empty;
        for (int i = 0; i < Dt.Columns.Count; i++)
        {
            StrDc[i] = Dt.Columns[i].Caption;
            HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
        }
        HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
        StringBuilder Sb = new StringBuilder();

        Sb.Append("{\"" + Dt.TableName + "\" : [");
        for (int i = 0; i < Dt.Rows.Count; i++)
        {
            string TempStr = HeadStr;
            Sb.Append("{");
            for (int j = 0; j < Dt.Columns.Count; j++)
            {
                if (Dt.Rows[i][j].ToString().Contains("'") == true)
                {
                    Dt.Rows[i][j] = Dt.Rows[i][j].ToString().Replace("'", "");
                }
                TempStr = TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString());
            }
            Sb.Append(TempStr + "},");
        }
        Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
        Sb.Append("]}");
        return Sb.ToString();
    }
    public DataSet GetDesignationViewData()
    {
        try
        {
            string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
            return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, DataTemplate.spDesignation_View);
        }
        catch (Exception err)
        {
            throw err;
        }
    }
役に立ちましたか?

解決

asyncpatternにはいくつかの用途があります。これは主に、ブロッキング操作でワーカープールリクエストスレッドを解放できるサーバーパフォーマンスの最適化です。たとえば、DBアクセスのような長期にわたるブロッキング操作が発生した場合、Asyncpatternを使用してサーバーでAsync DB APIを使用している場合、ワーカースレッドはプールに戻り、他のリクエストをサービスできます。元のリクエストは、DBアクセスが完了し、残りの作業が完了したときに別のワーカースレッドで「目覚めた」ものです(サービスクライアントは辛抱強く待機しています。およびバインディング)。これにより、サービスが慎重に行われた場合、サービスがより多くのリクエストを処理できるようになります。有利にするには、ネイティブの非同期実装があるサーバーでAPIを使用する必要があります。候補者であると思われるのは、sqlhelper.executedatasetメソッドで起こっているDBコールです。真の非同期オプションが利用可能であることを確認するために、基礎となるAPIを読み取る必要があります(beginxxx/endxxxメソッドの存在必ずしもそれが真の非同期empl)を意味するわけではありません)。 System.sqlclientのものは本当に非同期です。

注意事項:これを価値のあるものにするために多くのリクエストを処理する必要があります。複雑さと読みやすさをコーディングするには、この方法で物事を分割するためのかなりのコストがあります。また、マルチスレッドプログラミングを非常によく理解する必要があります。これは、SOポストの範囲外のロック、エラー処理などに多くの落とし穴があります。

幸運を!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top