我正在使用Xamarin在visual studio中创建一个Android应用程序,我最终得到错误:
“System.Net.WebException:获取响应流时出错(ReadDone2): ReceiveFailure”。
在我创建的服务尝试返回列表但最终停止在我的CompletedEventArgs结果调用之后,会发生这种情况。我的Android应用程序有一个代理客户端,它调用我的WCF服务,该服务与SQL Server通信。我的代码如下:
private void ClientOnGetTransactionsCompleted(object sender, GetTransactionsCompletedEventArgs e)
{
transactions = new List<TransactionInterface>();
try
{
Console.Out.WriteLine(e.Result.Length);
for (int i = 0; i < e.Result.Length; i++)
{
transactions.Add((TransactionInterface)e.Result[i]);
}
RunOnUiThread(() => list.Adapter = new AccountAdapter(this, transactions));
}
catch(System.Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
我正在尝试使用属于TransactionInterface的两个不同对象填充列表。我可以在我的活动中填充列表,但是当我调用该服务时它失败了。我的服务代码是:
public List<TransactionInterface> GetTransactions(string id)
{
DataClasses1DataContext context = new DataClasses1DataContext();
var tollQuery = from t in context.Tolls
where t.account_id.Equals(id)
select new InterfaceTollTest(t.status_time, t.fee, t.plate_id);
var paymentQuery = from p in context.Payments
where p.account_id.Equals(id)
select new InterfacePaymentTest(p.status_time, p.payment1, p.credit_type);
var tolls = tollQuery.ToList();
var payments = paymentQuery.ToList();
var all = new List<TransactionInterface>();
System.Console.WriteLine("Bunny Rabbit");
for (int i = 0; i < tolls.Count; i++)
{
all.Add(tolls[i]);
}
for (int i = 0; i < payments.Count; i++)
{
all.Add(tolls[i]);
}
return all;
}
我已经测试了我的代码,以检查我的查询是否正常工作,并且按预期返回所有内容。也许我在服务中错误地投了它但是我在Activity中尝试了相同的东西来填充列表并且它工作正常。 CompletedEventArgs返回object [],我修改它以返回List,但这没有帮助。我尝试了这两个,看看我是否得到了一个结果,它只是停止了同样的错误。
Console.WriteLine(e.Result.Length);
Console.WriteLine(e.Result.Count);
我不确定我是否只是忽略了一些小错误,但任何帮助都会非常感激。
答案 0 :(得分:0)
我弄清楚出了什么问题。这里的问题是WCF测试客户端不支持我的GetTransactions服务,因为它使用类型System.Object []。由于我使用SLsvcUtil来创建我的代理客户端,因此它没有显示错误所在的following screen。为了使这个工作在我的服务中为我想要添加到我的列表的对象创建了一个DataContract。希望这可以帮助其他任何人解决这个问题。