Случайная ошибка «Не найдено» при доступе Silverlight к веб-службам ASP.NET - PullRequest
0 голосов
/ 30 марта 2010

Я разрабатываю приложение с Silverlight 3 и веб-службами ASP.NET, которое использует Linq to SQL для получения данных из моей базы данных SQL Server.

Случайно, когда пользователь вызывает действие для получения информации от любого из моих методов веб-службы, Silverlight генерирует исключение «Удаленный сервер возвратил ошибку: NotFound.», Типа «CommunicationException», со статусом InnerException «System». .Net.WebExceptionStatus.UnknownError».

Почти 10% запросов получают эту ошибку. Если пользователь пытается снова получить ту же информацию, обычно запрос не содержит ошибок, и пользователь получает данные.

При отладке в Visual Studio только Silverlight останавливается на исключении, и я не вижу причин, по которым веб-служба не найдена.

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

если вы используете веб-службы WCF, попробуйте включить трассировку WCF в файле web.config:

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

Для контекста и деталей: ЧИТАЙТЕ МНЕ!

1 голос
/ 06 июля 2010

Проблема, с которой вы сталкиваетесь, заключается в том, что веб-служба не возвращает никаких сведений об исключении клиенту Silverlight при возникновении какого-либо исключения. Он просто возвращает 404 статус не найден как результат, и, следовательно, вы всегда получаете исключение «Не найдено».

Что вы можете попробовать сделать, так это убедиться, что ваш веб-сервис возвращает 200 (действительный результат) даже в случае исключения и каким-то образом возвращает сообщение об ошибке вместе с объектом.

пример:

public class WebServiceResult

{

   //your object's properties go here


   //extra properties to check if exception has occured

   public string ErrorMessage {get; set;}

   public bool IsError {get; set;}
}

Используйте Fiddler, чтобы попытаться лучше понять, что я говорю. Вы увидите ошибку 404 в случае каждого исключения.

0 голосов
/ 08 июля 2010

Насколько я знаю, WebClient рассматривает все ошибки как «404». Если вы можете переключить код на использование HttpClient, вы получите больше подробных ошибок. Если этот код похоронен (или сгенерирован), то лучшим выбором будет Fiddler.

...