Вы можете использовать InstanceContextMode.PerSession в службе WCF, чтобы совместно использовать один раз созданный экземпляр соединения со всеми вызовами службы в сеансе, а когда вы закончите, вы можете удалить соединение, вызвав метод DisposeConnection ().
Надеюсь, это поможет вам!
Пример:
[ServiceContract]
public interface IConnectionService
{
[OperationContract]
void InitSqlConnection(string UserName, string passWord);
[OperationContract]
void DisposeSqlConnection();
[OperationContract]
string GetUserAccounts();
[OperationContract]
string GetUserRoles();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ConnectionService : IConnectionService
{
SqlConnection connection;
public void InitSqlConnection(string UserName, string passWord)
{
if (connection == default(SqlConnection))
{
connection = new SqlConnection(string.Format("Data Source=.;Initial Catalog=WADB;User Id={0};Password={1};", UserName, passWord));
connection.Open();
}
}
public void DisposeSqlConnection()
{
if (connection != default(SqlConnection))
{
connection.Close();
connection.Dispose();
}
}
public string GetUserAccounts()
{
string data = string.Empty;
if (connection != default(SqlConnection))
{
//// do database operation with "connection"
SqlDataAdapter da = new SqlDataAdapter("select * from tblUserAccount", connection);
DataSet ds = new DataSet();
da.Fill(ds);
data = ds.GetXml();
}
return data;
}
public string GetUserRoles()
{
string data = string.Empty;
if (connection != default(SqlConnection))
{
//// do database operation with "connection"
SqlDataAdapter da = new SqlDataAdapter("select * from tblUserRole", connection);
DataSet ds = new DataSet();
da.Fill(ds);
data = ds.GetXml();
}
return data;
}
}