2012-03-06 11 views
0

私はvariosイベントを表示するasp.net mvc appを持っています。すべてのイベントはデータベースに格納されます。しかし今、データベースとリモートプログラムからデータをロードする必要があります。このプログラムは外部サービスを持っています(これは特定のTCPポートを受信し、クエリを受信して​​xmlを返す単純なプログラムです)。asp.net mvcアプリケーションのTCPClient

そして、私は外部プログラムに接続するテストのための簡単なページを書いています。コードは、MSDNから得た:私は、このソリューションがもパフォーマンスを減らすことになると思い

public ActionResult GetData() 
     {   

      string query = "some query"; 

      var response = Connect("192.168.0.1", query); 
      var model = ParseResponse(response); 
      return View(model); 
     } 

static string Connect(String server, String message) 
{ 
    try 
    { 
    // Create a TcpClient.   
    Int32 port = 9197; 
    TcpClient client = new TcpClient(server, port); 

    // Translate the passed message into ASCII and store it as a Byte array. 
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);   

    // Get a client stream for reading and writing. 
    // Stream stream = client.GetStream(); 

    NetworkStream stream = client.GetStream(); 

    // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length); 

    // Receive the TcpServer.response. 

    // Buffer to store the response bytes. 
    data = new Byte[256]; 

    // String to store the response ASCII representation. 
    String responseData = String.Empty; 

    // Read the first batch of the TcpServer response bytes. 
    Int32 bytes = stream.Read(data, 0, data.Length); 
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);     


    stream.Close();   
    client.Close(); 
    return responseData; 
    } 
    catch (ArgumentNullException e) 
    { 
    // 
    } 
    catch (SocketException e) 
    { 
    // 
    } 

} 

これは私の行動です。

ASP.NET MVC 3アプリでTCPClientを使用するのに最も良い方法は何ですか?
私のコードについてどう思いますか? ご提案は大歓迎です。

答えて

1

私はこの解決策がパフォーマンスを低下させると思います。

すべての/ほとんどのデータベース操作はソケットを介して行われます。あなたはそれに気付かないのですか?

最も可能性の高いパフォーマンスの問題は、次のとおりです。

  1. サーバーに
  2. Serverの場所
  3. 接続のセットアップ私は今、どうなる唯一のことは、クライアントにチェックして構築することである

応答時間が高すぎる場合は、応答時間を監視し、ログに書き込む(または電子メールを送信する)ことができます。

パフォーマンスが最適化されるまで、パフォーマンスを最適化しようとしないでください。上記の問題のため

ソリューション:

  1. リファクタリングと
  2. のいずれかを最適化するには、同じLAN上のサーバーを置くか、キャッシュプロキシサーバーを作成します。
  3. 毎回接続を切断するのではなく、接続プーリングを使用します。
0

私はこの解決策がパフォーマンスを低下させると思います。

これは、サーバーが実行する他のリモート要求(I/O集中型操作)と同じです。したがって、asynchronous controllerとTcpClientメソッドの非同期バージョンを使用できます。このようにして、リモート要求の実行中にサーバー上のワーカースレッドを危険にさらすことはありません。

関連する問題