1

したがって、使用済みの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;
        }
    }
4

1 に答える 1

1

AsyncPatternにはいくつかの用途があります。これは主にサーバーのパフォーマンスの最適化であり、ブロッキング操作でワーカープール要求スレッドを解放できます。たとえば、DBアクセスなどの長時間実行されるブロッキング操作が発生した場合、AsyncPatternを使用してサーバーで非同期DB APIを使用していると、ワーカースレッドはプールに戻って他のリクエストを処理できます。元のリクエストは、後でDBアクセスが完了すると、別のワーカースレッドで「ウェイクアップ」され、残りの作業が完了します(サービスクライアントは辛抱強く待機します。AsyncPattern対応クライアントを使用していない限り、これはすべて透過的です。およびバインディング)。これにより、慎重に行うと、サービスがより多くのリクエストを処理できるようになります。利用するには、ネイティブの非同期実装を持つサーバーでAPIを使用する必要があります。候補となる可能性があるのは、SQLHelper.ExecuteDatasetメソッドで発生しているDB呼び出しだけです。基盤となるAPIを調べて、TRUE非同期オプションが使用可能であることを確認する必要があります(BeginXXX / EndXXXメソッドが存在します)。必ずしもそれが真の非同期IMPであることを意味するわけではありません)。System.SqlClientのものは本当に非同期です。

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

幸運を!

于 2010-03-08T08:10:56.147 に答える