好吧,我有一个WCF服务将作为一种访问我的SQL数据库的方式。这部分已经在很大程度上与这个问题无关,因为由于某种原因,我的WCF服务崩溃了。或者,至少,它会导致我的客户端Silverlight应用程序崩溃。这就是我来这里问你们的原因。行为异常的WCF服务异步调用
所以这里的代码。请记住,它是从我的Silverlight客户端异步调用的。完成后,从该方法返回的字符串将放置在客户端的屏幕上。
public string AddClients(IEnumerable<Client> newClients)
{
int nAdded = 0;
int nelse = 0;
string str = "";
List<Client> newClientsList = newClients.ToList();
List<Client> existingClients = dc.Clients.ToList();
List<Client> clientsToAdd = new List<Client>();
return newClientsList.Count.ToString();
foreach (Client client in newClientsList)
{
var clt = existingClients.FirstOrDefault(c => c.ClientName == client.ClientName);
if (clt == null)
{
return clt.ClientName;
//str = str + " found: " + clt.ClientName + "\n";
//dc.Clients.(clt);
//existingClients.Add(clt);
// clientsToAdd.Add(clt);
nAdded++;
}
else
{
nelse++;
}
}
if (nAdded > 0)
{
//str = str + " more than one nAdded";
// dc.Clients.InsertAllOnSubmit(clientsToAdd);
// dc.SubmitChanges();
}
return nelse.ToString();
}
您可以弄清楚什么是应该是发生,但大部分不是因为这样的事实,它不工作了,我非常好,现在发生的事情。
目前,正如你所看到的,在很早的时候(在foreach之前)有一个回报。事情就像现在一样,那可行。您按客户端中的按钮,它会进行呼叫,然后返回。就这样,你得到'3'作为字符串返回(这是newClients的大小,参数)。这没关系,并且至少证明该服务可以连接到,它返回消息没关系,而不是。
如果我删除最顶端的回报,这是它变得有趣(好,有问题)的地方。它应该返回clt.ClientName
,在if (clt==null)
的条件下,或者它应该返回nelse.ToString()
这是最后的权利。
我究竟得到了什么?没有。完成的方法似乎永远不会被调用(它显示的消息框永远不会出现)。
我已经评论了大部分内容。当然,它必须达到这些条件之一!我错过了一些非常明显的东西吗?我真的一直试图调试这个很长时间,但没有!有人能看到我看不到的东西吗?
为了记录,'dc'是数据上下文,dc.Clients是客户端实体列表。
您是否曾尝试在WCF代码中放置断点,无论是在服务器上还是在客户端上?上述方法中的回报受到打击吗?是否抛出任何异常? Silverlight事件处理程序是否被调用? Silverlight AsyncCompletedEventArgs(e.Error)null中的异常? – 2011-12-14 17:28:57
我不得不在服务中断点(或者至少它们不会触发;它不是我客户端应用程序项目的一部分 - 它托管在IIS中)。尽管我没有检查返回的错误消息。感谢您的建议。 – TheFaithfulLearner 2011-12-15 09:12:41