为什么我的WCF服务超时时,我试图填补我的数据
本文关键字:我的 数据 WCF 服务 超时 为什么 | 更新日期: 2023-09-27 18:12:27
我有一个MVC应用程序连接到一个wcf服务,我试图使一个todo列表应用程序的功能是依赖于其他任务的任务,我到目前为止没有运气与此,但我已经建立了一个存储过程,我现在从我的wcf服务调用并给出响应回给客户端。
此时,客户端在1分钟无响应后给出如下错误:
"The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout."
我的WCF服务上的代码是这样的;
public DataTable GetAllDependantTasks(string id)
{
DataTable dt = new DataTable();
try
{
using (SqlConnection conn = new SqlConnection())
using (SqlCommand com = new SqlCommand())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ToDoDatabase"].ConnectionString;
com.Connection = conn;
com.CommandText = "usp_GetAllDependantTaskInfoByID";
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("@id", id));
conn.Open();
SqlDataReader returnvalue = com.ExecuteReader();
if (returnvalue.HasRows)
{
//List<DataRow> items = new List<DataRow>();
dt.Load(returnvalue);
// foreach (DataRow row in dt.Rows)
// {
// items.Add(row);
//}
return dt;
}
else
{
throw new RowNotInTableException();
}
}
}
catch (Exception ex)
{
//TODO: Write error to log
return new DataTable();
}
}
我在我的前端使用一个ASPX页面,违规代码看起来像这样;
private void LoadTasks()
{
// get the todo list items
ToDoService.ToDoServiceClient client = new ToDoService.ToDoServiceClient();
try
{
// List<ToDoService.ToDoItemContract> toDoItems = client.GetToDoItems("").ToList();
List<string> Items = new List<string>();
foreach(var row in client.GetAllDependantTasks("").Rows)
{
Items.Add(row.ToString());
}
dlTasks.DataSource = Items;
dlTasks.DataBind();
client.Close();
}
catch (Exception ex)
{
// TODO: Log error
client.Abort();
}
}
谁能给我指一下正确的方向?我想用现有的任务加上它们所依赖的任务来填充前端的数据表,我试图从我的wcf服务返回一个数据表,将其绑定到列表,但它似乎不喜欢它!提前感谢:)
可能返回的数据很多,需要时间。SqlCommand默认超时时间为15秒。
如果你想做
com.Connection = conn;
com.CommandTimeout = 0;
禁用连接超时,并允许更多时间执行填充。尝试调整它(时间单位为毫秒),以避免在出现问题时使其无限期运行。
如果没有,尝试使用
设置web服务的操作超时。Webservice.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(10);
设置一个更长的时间跨度,因为wcf的默认时间跨度是1:00。