我在无法使用代码访问WCF服务时使用TaskCompletionSource。因为如果我直接使用他们服务上的方法而不使用TaskCompletionSource,它将不会返回任何记录。
在我的网络api操作中,我拥有
[HttpGet]
public Task<IList<Details>> GetDetails()
{
var tcs = new TaskCompletionSource<IList<Details>>();
ServiceProxy.Instance.ListDetailsAsync((Exception ex,List<Details> details,
object obj)=>
{
tcs.SetResult(details);
}, null);
return tcs.Task;
}
他们创建的ServiceProxy显示如下
public void ListDetailsAsync(Action<Exception, List<Details>, object> final, object context)
{
CallClient<object, List<string>, List<Details>>("Get all details", null, final, context, DetailsReadAll_Call);
}
void DetailsReadAll_Call(WCFServiceClient client, object input1, object detailsState)
{
client.GetAllDetailsCompleted += GetAllDetails_Completed;
client.GetAllDetailsAsync(detailsState);
}
void GetAllDetails_Completed(object sender, GetAllDetailsCompletedEventArgs e)
{
var detailsState = (DetailState<List<string>, List<Details>>)e.DetailState;
detailsState.Perform(e.Error, e.dex, delegate() { return e.Result.ToList(); }, delegate(List<string> result1, out List<Details> output1)
{
List<Details> details= new List<Details>();
foreach (string detailXml in result1)
{
details.Add(ObjectSerializer.Parse<Details>(detailXml));
}
output1 = details;
});
}
所有这些代码都可以在我的VS2012上的localhost上正常工作,这意味着它可以返回记录而没有任何错误。但是,当我将其部署在服务器上时,它不会返回任何记录,而在开发工具上,它将显示待处理状态。由于我无法在VS2012上复制该问题,因此整天都需要花费一整天的时间,因此不知道发生在哪里以及为什么发生。真的很需要帮助。