私はMVCアプリケーションをwcfサービスに接続していますが、私は他のタスクに依存するタスクを備えたtodoリストアプリケーションを作ろうとしています。これまではこれで不運でしたが、ストアドプロシージャこれはWCFサービスから呼び出して、クライアントに返信します。データリストに記入しようとすると、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サービスからdatatableを返してリストにバインドしようとしましたが、それを気に入らないようです!
ありがとうございます。
ストアドプロシージャを個別にテストしましたか?それは実行されますか?また、WCFインターフェイスと契約を投稿してください。 –