C# 跟踪下载/上传传输(大小)
我有一个WCF服务(C#),它有大约10个方法,5个用于获取数据(.NET数据集),5个用于更新数据(.NET数据集) 方法示例:C# 跟踪下载/上传传输(大小),c#,wcf,C#,Wcf,我有一个WCF服务(C#),它有大约10个方法,5个用于获取数据(.NET数据集),5个用于更新数据(.NET数据集) 方法示例: // getting data from Method public DataSet GetEmployeeContractInfo(Guid uid) { DataSet ds = null; Database db = InfoTacto.Framework.Web
// getting data from Method
public DataSet GetEmployeeContractInfo(Guid uid)
{
DataSet ds = null;
Database db = InfoTacto.Framework.WebServices.Common.GetDatabase();
using (DbCommand cmd1 = db.GetStoredProcCommand("sp_employee_contractinfo_get"))
{
db.AddInParameter(cmd1, "employeeuid", DbType.Guid, uid);
ds = db.ExecuteDataSet(cmd1);
}
if (ds.Tables.Count > 0)
{
ds.Tables[0].TableName = "contract_info";
}
return ds;
}
/// <summary>
///
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public bool UpdateEmployeeContractInfo(DataSet ds)
{
bool returnVal = true;
Database db = Common.GetDatabase();
DbConnection conn = db.CreateConnection();
conn.Open();
DbTransaction trans = conn.BeginTransaction();
try
{
if (ds != null && (
(ds.Tables.Contains("contract_info") && ds.Tables["contract_info"].Rows.Count > 0)
)
)
{
foreach (DataRow dr in ds.Tables["contract_info"].Rows)
{
if (dr.RowState == DataRowState.Modified || dr.RowState == DataRowState.Added)
{
using (DbCommand cmd1 = db.GetStoredProcCommand("sp_employee_contractinfo_change"))
{
db.AddInParameter(cmd1, "employeeuid", DbType.Guid, dr["employeeuid"]);
//... all other parameters
db.ExecuteNonQuery(cmd1,trans);
}
}
}
}
trans.Commit();
}
catch
{
trans.Rollback();
returnVal = false;
}
finally
{
// Cleanup
conn.Close();
}
return returnVal;
}
//从方法获取数据
公共数据集GetEmployeeContractInfo(Guid uid)
{
数据集ds=null;
Database db=InfoTacto.Framework.WebServices.Common.GetDatabase();
使用(DbCommand cmd1=db.GetStoredProcCommand(“sp\u employee\u contracinfo\u get”))
{
添加参数(cmd1,“employeeuid”,DbType.Guid,uid);
ds=db.ExecuteDataSet(cmd1);
}
如果(ds.Tables.Count>0)
{
ds.Tables[0].TableName=“合同信息”;
}
返回ds;
}
///
///
///
///
///
公共bool UpdateEmployeeContractInfo(数据集ds)
{
bool returnVal=true;
Database db=Common.GetDatabase();
DbConnection conn=db.CreateConnection();
conn.Open();
DbTransaction trans=conn.BeginTransaction();
尝试
{
如果(ds!=null&&(
(ds.Tables.Contains(“合同信息”)和ds.Tables[“合同信息”]。Rows.Count>0)
)
)
{
foreach(ds.表[“合同信息”]行中的数据行灾难恢复)
{
if(dr.RowState==DataRowState.Modified | | dr.RowState==DataRowState.Added)
{
使用(DbCommand cmd1=db.GetStoredProcCommand(“sp\u employee\u contracinfo\u change”))
{
db.AddInParameter(cmd1,“employeeuid”、DbType.Guid、dr[“employeeuid”]);
//…所有其他参数
db.ExecuteNonQuery(cmd1,trans);
}
}
}
}
trans.Commit();
}
抓住
{
trans.Rollback();
returnVal=false;
}
最后
{
//清理
康涅狄格州关闭();
}
返回值;
}
我的20名用户将通过celular调制解调器使用WIFI,因为他们所在的位置无法访问传统WIFI,因此我需要跟踪使用我的WCF服务获取数据和上传数据的带宽,这样,如果我有这些信息,我就可以真正知道他们是否消耗了比WCF服务所跟踪的带宽更多的带宽,然后他们在看视频等,人力资源部可以采取行动
有线索吗?我正在考虑在将数据集
发送到客户端之前检查每个数据集
对象的大小,然后将该值存储到数据库表中,并在从客户端接收数据集时执行相同操作。数据集
?你见过数据集序列化时的样子吗?创建您自己的对象并将其序列化为DataContract
将大大减少带宽占用。hole应用程序非常庞大,将所有WCF服务从dataset转换为自定义对象非常糟糕。我同意Tim的观点。强烈建议不要从您的服务返回数据集
对象。看看Scott Hanselman说了些什么:。