为什么我的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服务返回一个数据表,将其绑定到列表,但它似乎不喜欢它!

提前感谢:)

为什么我的WCF服务超时时,我试图填补我的数据

可能返回的数据很多,需要时间。SqlCommand默认超时时间为15秒。

如果你想做

com.Connection = conn;
com.CommandTimeout = 0;

禁用连接超时,并允许更多时间执行填充。尝试调整它(时间单位为毫秒),以避免在出现问题时使其无限期运行。

如果没有,尝试使用

设置web服务的操作超时。
Webservice.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(10);

设置一个更长的时间跨度,因为wcf的默认时间跨度是1:00。