Моя операция в стеке вызовов службы WCF вызывается, но не завершается - PullRequest
2 голосов
/ 24 мая 2011

Я поддерживаю приложение 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"); никогда не достигаются.

Подводя итог:

  1. Клиент вызывает UpdateBlahblahListAsync
  2. В сервисе [OperationContract] UpdateBlahblahList достигается
  3. Сервисный метод UpdateBlahblahList вызывает ExecuteMyPortalNonQuery, но не завершается
  4. Клиент повторно входит с 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", "некоторая длинная строка соединения"}

1 Ответ

0 голосов
/ 11 июля 2011

В файле конфигурации вашего хостинг-приложения (веб или консоль, что угодно) вы можете поместить следующие строки для включения трассировки:

    <system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
            <listeners>
                <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Services.svclog"  />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

, затем воспроизведите вашу ошибку снова, откройте «Services.svclog», и вы сможете увидеть детали wcf-вызовов, включая подробности исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...