Для тех, кто все еще сталкивается с этой проблемой, - как обычно, есть пара абсолютно важных вещей, оставленных из вышеприведенного обсуждения, без которых нет надежды найти ответ.Вот что заняло у меня 3 часа роутинга в сети, чтобы узнать.
Напомним: во-первых, я получил страшную ошибку Not Found, используя WCF из службы Silverlight.Нет, это не потому, что сервис не найден.Мне удалось пройти через вызываемый метод обслуживания до конца, включая возврат.Затем клиентская сторона получила исключение в асинхронной конечной части вызова.Нет объяснения.Это не имеет никакого отношения к привязкам и т. Д.
Затем я нашел подобные сообщения на форуме об использовании средства просмотра трассировки.Оказывается, я уже настроил это, но не получил никакого следа (таким образом, я полагал, что мой сервис должен быть в порядке, особенно, так как я мог проследить через).Неправильный мальчик Бонго.Затем я обнаружил другое сообщение о том, что малоизвестный факт: если вы настроили прослушиватель трассировки для записи в «C: \ logs \ mylog», вы ДОЛЖНЫ сначала создать C: \ logs вручную.Это не сделает это для вас.
Хорошо, теперь я получаю журнал и поднимаю его в TraceViewer.После чего я получаю «сообщение об ошибке» о неопределенной строке.Тридцать минут спустя я нахожу другое сообщение о том, что все знают, что сначала вы должны завершить работу локального сервера разработки, чтобы удалить последние сообщения.Вы знаете, те, которые на самом деле говорят вам, что пошло не так?
Теперь я перехожу к реальным ошибкам и смотрю на каждую из них: выбрасываю исключение, RequestContext прерван и сообщение с ошибкой для отправки ответа по http.Только первое имеет значение.За исключением, конечно, взгляда на нижнюю панель, он не дал мне никакой полезной информации, кроме как сказать, что была ошибка Сериализации.Хм, "где" было бы неплохо.
В конце концов я внезапно заметил, что есть небольшая вкладка XML в нижней панели, прямо рядом с вкладкой "Форматированный".Когда я нажимаю на это, для моего сообщения ThrowingAnException, это - огромный дамп с очень специфическим сообщением, которое привело меня прямо к проблеме:
System.ServiceModel.CommunicationException, System.ServiceModel, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 Произошла ошибка при попытке сериализации параметра: GetTimecardsWithAlertsResult.Сообщение InnerException "Enum value" 0 "недопустимо для типа" Timeclock.Web.ShiftManager.AlertType "и не может быть сериализовано.Убедитесь, что необходимые значения перечисления присутствуют и помечены атрибутом EnumMemberAttribute, если тип имеет атрибут DataContractAttribute. '.Пожалуйста, смотрите InnerException для получения более подробной информации.
Проблема была в том, что я не инициализировал основанный на перечислении член класса, поэтому это был 0, что НЕ было одним из моих допустимых значений перечисления.Очень просто исправить.
И, разумеется, Microsoft очень просто это обнаруживать, учитывая тот большой объем информации, который они успешно прятали от посторонних глаз в течение 3 часов.
Вот идея Microsoft - как насчет того, чтобы предложить способ уловить эти ошибки и все важные сообщения об исключениях на сервере?Или позволить им полностью перейти к клиенту Silverlight?Вы знаете, чтобы было легче увидеть, что происходит, поэтому я мог бы решить эту простую проблему за 3 секунды, которых она заслуживает, вместо 3 часов, которые я должен взимать с моего клиента за то, что он ничего не делал?
О, Я знаю.Это действительно сложно, потому что это асинхронный вызов по протоколу http, а злой старый интернет делает его вредным для вашего мозга.Но угадайте что?Вы Microsoft.У вас есть неограниченное время и деньги.И вы влияете на миллионы людей.Когда вы облажаетесь с этим видом **, как вы делаете с тысячами сценариев, в которых вас просто не волнуют, вы затрагиваете сотни тысяч разработчиков по всей планете.
Оглянись на StackOverflow. Посмотрите, сколько людей по всему миру, умных людей, пытающихся написать программное обеспечение для выполнения полезных важных дел, просто не погружены в невероятные мелочи, подобные описанным выше, потому что, вы знаете, у них есть реальная работа.
Умножьте мои 3 часа на эту дурацкую проблему раз десятки тысяч разработчиков раз 30-40 эпизодов такого рода дерьма в типичном году, и вы увидите, какие катастрофы вы вызываете. Можно сказать «вот почему нам платят большие деньги», но подумайте о том, какую действительно хорошую работу мы все могли бы выполнить в мире, если каждый раз, когда мы оборачиваемся, нам не нужно погружаться на 3 часа * * яму вырыли для нас?
Microsoft, ты плохой для программирования, плохой для бизнеса и плохой для человечества. Мне все равно, сколько компьютеров работает с вашим программным обеспечением. Вам нужно сделать лучше. Пожалуйста, начните вести себя так, как будто вы понимаете, насколько сильно вы оскорбляете миньонов трудолюбивых людей в мире, в каждой стране, каждый день. И насколько лучше было бы сделать это место, если бы ты просто действовал так, как это важно, чтобы все делать правильно.
Тим Джонсон