Хорошо, у меня есть служба WCF, которая будет служить способом доступа к моей базе данных SQL. Эта часть в значительной степени не имеет отношения к этому вопросу, так как по какой-то причине мой сервис WCF падает. Или, по крайней мере, это вызывает сбой моего клиентского приложения Silverlight. Вот почему я прихожу сюда, чтобы спросить вас об этом, ребята.
Так вот код. Имейте в виду, что он вызывается асинхронно из моего клиента 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 - список клиентских сущностей.