Я поддерживаю приложение Silverlight 4.0, которое выполняет вызов службы WCF. Когда я отлаживаю сервис, размещенный локально на IIS, он подходит к этому методу, но, очевидно, покидает метод, не возвращаясь с конца. Я не вижу вызываемых исключений.
Это метод в бизнес-классе, который не может вернуться к вызывающему методу.
public string ExecuteMyPortalNonQuery(string CommandConfig, params object[] commandParams)
{
MyCompany.MyPortal.DataAccess.SQLDataAccess objSQLDatAcces = new SQLDataAccess();
objSQLDatAcces.connection = ConfigurationSettings.AppSettings["MyPortalSQLConnection"];
string SqlQueryString = ConfigurationSettings.AppSettings[CommandConfig];
if (commandParams != null && commandParams.Length > 0)
SqlQueryString = string.Format(SqlQueryString, commandParams);
objSQLDatAcces.executeNonQuery(SqlQueryString);
return ("SUCCESS");
}
Редактировать
Это называется договором операции
[OperationContract]
public string UpdateBlahblahList(int Id, int HierarchyId, int PagetypeId, string Name, string Asset, Boolean Default, string ServerName = "", string ServerConnectionString = "")
{
MyCompany.MyPortal.DataAccess.SAPAccess sp = new SAPAccess();
if (Id != 0)
return (sp.ExecuteMyPortalNonQuery("UpdateBlahblahList", Id, Name, Asset, (Default == true) ? 1 : 0, ServerName, ServerConnectionString));
else
return (sp.ExecuteMyPortalNonQuery("InsertBlahblahList", HierarchyId, PagetypeId, Name, Asset, (Default == true) ? 1 : 0, ServerName, ServerConnectionString));
}
То есть при отладке я нахожусь в вызывающем клиенте прямо в методе UpdateBlahblahCompleted после перехода через строку форматирования строки, SqlQueryString = string.Format(SqlQueryString, commandParams);
Строки objSQLDatAcces.executeNonQuery(SqlQueryString);
и return ("SUCCESS");
никогда не достигаются.
Подводя итог:
- Клиент вызывает UpdateBlahblahListAsync
- В сервисе [OperationContract] UpdateBlahblahList достигается
- Сервисный метод UpdateBlahblahList вызывает ExecuteMyPortalNonQuery, но не завершается
- Клиент повторно входит с client_UpdateBlahblahListCompleted |
В результате база данных не обновляется.
Отладка вызывает это? Я отлаживаю с двумя экземплярами VS 2010.
Можно ли сгенерировать исключение, которого я не наблюдал?
Редактировать
Спасибо Саймону, я знаю, где соблюдать исключение. В методе «Асинхронный завершенный метод» клиента было самое внутреннее сообщение об исключении: «Удаленный сервер возвратил ошибку: NotFound.».
Вот значения для двух параметров:
ОБНОВЛЕНИЕ [dbo]. [BlahblahXref] SET [PageId] = '{1}', [Name] = '{2}', [Asset] = '{3}', [Default] = '{4}', [ ServerName] = '{5}', [ServerConnectionString] = '{6}' WHERE Id = {0}
с
commandParams [] = {375, "Test", "111", 0, "someServerName", "некоторая длинная строка соединения"}