2012-04-15 11 views
4

私はWebサービス、C#、および.NETについては初めてです。 データベースにデータを書き込むためにWebメソッドで接続オブジェクトを使用したいが、このオブジェクトのインスタンスを作成する場所はありません。インスタンス化してWebメソッドで破棄するのは非常にばかげています。 私は接続インスタンスに毎回アクセスできるようにしたいので、これを適切に行うためのコンストラクタなどがあります。Webサービスのインスタンス化オブジェクトC#.NET

+0

オブジェクトを作成して使用し、すぐに破棄するのはばかげていません。どうしてそう思うの? – svick

答えて

3

私はあなたが何を意味するか知っている:あなたには、接続管理コードを繰り返す必要はありませんすべての方法。それは確かにばかげているでしょう。

私はこれを好きです:私はthis techniqueを使用してリクエストごとの接続を作成します。 WCF呼び出しが終了すると、私は接続を破棄します。

コール中に、私はこの接続が存在することに依存することができます。それは正しくクリーンアップされます。

残念ながら、WCFにはHttpContext.Items組み込み関数がありません。そのため、拡張子を使用してハックする必要があります。

3

Webメソッドでデータベース接続クラスをインスタンス化する必要があります。

  • C#はobject-orientated言語である:私はあなたのウェブメソッドで、このようなオブジェクトをインスタンス化についてのばかげたものは何も存在しないことを主張するだろう。オブジェクトを作成せずに多くを達成するつもりはない。
  • ほとんどのADO.NET接続オブジェクト(SQL Server & Oracleを含む)は接続プールを実装しているため、新しい接続オブジェクトを作成するたびにサーバーへの物理接続を作成しません。その代わりに、データベース・ライブラリーは接続プールを管理します。

私はあなたがWebサービスの呼び出し後に接続を解除することを確認するために、このようなものをお勧めします:

// This example uses SQL-Server connections, but most 
// ADO.NET database drivers are similar. 
using(SqlConnection conn = new SqlConnection(MyConnStr)) 
{ 
    UseConnection(conn); 
} 
// connection released to pool here automatically. 
関連する問題