[急]Remoting + MSSQL 服务端程序[疑难杂症]?
//启动Remoting
HttpChannel MyHttpChannel = new HttpChannel(50001);
ChannelServices.RegisterChannel(MyHttpChannel, false);
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType( "Service ", true, false), "MyServer ", WellKnownObjectMode.SingleCall);
//调用MSSQL
public int Address_Degree(string S_NAME, string M_NAME, int A_PART)
{
SqlParameter[] Parameters = { new DB.Server().S_NAME, new DB.Movie().M_NAME, new DB.Address().A_PART };
Parameters[0].Value = S_NAME;
Parameters[1].Value = M_NAME;
Parameters[2].Value = A_PART;
return new MSSQL(new DB().Connstring).ProcedureRun( "Address_Degree ", Parameters);
}
/// <summary>
/// 处理 Microsoft Sql Server 2000 的数据类。
/// </summary>
public class MSSQL
{
private SqlConnection Conn;
public MSSQL(string ConnString)
{
Conn = new SqlConnection(ConnString);
}
#region Error_Handler
public void Error_Handler(string cmdText, Exception e)
{
try
{
File.AppendAllText(System.Environment.CurrentDirectory + @ "\ " + DateTime.Now.ToString( "yyyyMMdd ") + ".txt ", DateTime.Now.ToString() + " " + cmdText + " " + e.Message + Environment.NewLine);
}
catch (Exception)
{
}
}
#endregion
#region ExecuteReader
public ArrayList ExecuteReader(string cmdText)
{
SqlCommand cmd = new SqlCommand(cmdText, Conn);
ArrayList Arr = new ArrayList();
try
{
cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Arr.Add(dr[0]);
}
dr.Close();
}
catch (SqlException e)
{
Error_Handler(cmdText, e);
}
finally
{
cmd.Dispose();
cmd.Connection.Close();
}
return Arr;
}
#endregion
//Int
#region ProcedureRun
public int ProcedureRun(string ProcedureName)
{
SqlCommand cmd = new SqlCommand(ProcedureName, Conn);
int row = 0;
try
{
cmd.Connection.Open();
cmd.CommandType = CommandType.StoredProcedure;
row = cmd.ExecuteNonQuery();
}
catch (SqlException e)
{
Error_Handler(ProcedureName, e);
}
finally
{
cmd.Dispose();
cmd.Connection.Close();
}
return row;
}
#endregion
//DataSet
#region ProcedureRun
public DataSet ProcedureRun(string ProcedureName, string TablenName)
{
SqlDataAdapter cmd = new SqlDataAdapter(ProcedureName, Conn);
cmd.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
try
{
Conn.Open();
cmd.Fill(ds, TablenName);
}
catch (System.Data.SqlClient.SqlException e)
{
Error_Handler(ProcedureName, e);
}
finally
{
cmd.Dispose();
Conn.Close();
}
return ds;
}
#endregion
//Object
#region GetSingle
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name= "SQLString "> </param>
/// <returns> </returns>
public object GetSingle(string ProcedureName, SqlParameter[] Parameters)
{
SqlCommand cmd = new SqlCommand(ProcedureName, Conn);
object Temp = null;
try
{
cmd.Connection.Open();
cmd.Parameters.AddRange(Parameters);
cmd.CommandType = CommandType.StoredProcedure;
Temp = cmd.ExecuteScalar();
if ((Object.Equals(Temp, null)) ¦ ¦ (Object.Equals(Temp, System.DBNull.Value)))
{
return null;
}
}
catch (System.Data.SqlClient.SqlException e)
{
Error_Handler(ProcedureName, e);
}
finally
{
cmd.Dispose();
cmd.Connection.Close();
}
return Temp;
}
#endregion
//ArrayList
#region ProcedureRun
public ArrayList ProcedureRun(string ProcedureName, bool IsField)
{
SqlCommand cmd = new SqlCommand(ProcedureName, Conn);
ArrayList Arr = new ArrayList();
cmd.CommandType = CommandType.StoredProcedure;
try
{
cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (IsField)
{
#region Field
while (dr.Read())
{
Arr.Add(dr[0].ToString());
}
#endregion
}
else
{
#region Row
if (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
Arr.Add(dr[i]);
}
}
#endregion
}
dr.Close();
}
catch (SqlException e)
{
Error_Handler(ProcedureName, e);
}
finally
{
cmd.Dispose();
cmd.Connection.Close();
}
return Arr;
}
#endregion
}
说明:
用户人数300以上;
MSSQL设置:全部默认设置
症状:
运行一定时间后出现 "超时时间已到。在操作完成之前超时时间已过或服务器未响应。 ",一旦出现错误后服务端程序再也不能进行服务了,所有操作将报同样错误.把服务端程序重新启动下又OK了。
[解决办法]
mark
我正考虑用remorting,就怕出现这个问题,期待解决,关注
[解决办法]
看看是不是数据库处理不过来的问题
[解决办法]
mark
[解决办法]
自定义负载平衡试试