WebException NotFound получен при использовании Silverlight с ASP.NET MVC - PullRequest
2 голосов
/ 11 января 2011

Я не совсем уверен, как это объяснить, но в основном я пытаюсь использовать приложение Silverlight, размещенное в приложении ASP.NET MVC. У меня есть основной контроллер на стороне MVC, который содержит метод, который принимает некоторый строковый параметр и возвращает ActionResult (для этой программы этот результат представляет собой некоторые данные Json).

Моя проблема возникает, когда я обрабатываю событие WebClient.OpenReadCompleted в элементе управления Silverlight. Когда метод WebClient.OpenReadAsync вызывается в этом элементе управления, он успешно достигает контроллера и затем возвращает соответствующий обработчик событий, как и ожидалось. Однако при обработке аргументы события содержат сообщение об ошибке: «Удаленный сервер возвратил ошибку: NotFound.».

Ранее я заметил, что это вызвано тем, что какая-то часть моего коммуникационного URL неверна - в данном случае это не так. Из некоторых Google, я также заметил, что это общая ошибка. Таким образом, я довольно озадачен. Чтобы еще больше сбить с толку, я использую ту же самую попытку связи в другой части программы, которая извлекает массив строк и прекрасно работает.

См. Пример кода ниже (из-за характера этой программы я не могу опубликовать полный код).

Управление Silverlight

WebClient mClient = new WebClient();

public void RequestData()
{
    mClient.OpenReadAsync(new Uri("http://localhost:51234/Home/GetData"));
    mClient.OpenReadCompleted += new OpenReadCompletedEventHandler(mClient_OpenReadCompleted);
}

private void mClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    if(!e.Cancelled && e.Error == null) // <-- e.Error here is a WebException
    {
        var serializer = new DataContractJsonSerializer(typeof(Data));
        Data data = (Data)serializer.ReadObject(e.Result);
    }
}

MVC Controller - по имени HomeController и доступ к нему с помощью «Home»

public ActionResult GetData()
{
    return Json(new Data(), JsonRequestBehaviour.AllowGet);
}

Примечание Здесь Data содержит три члена типов; строка, строка и байтовый массив. В целях сериализации я раскрыл все три члена через открытые свойства, содержащие как get, так и set части. Я также добавил публичный конструктор без аргументов.

Любой совет по этому вопросу будет принята с благодарностью.

Большое спасибо заранее.

UPDATE

Я только что попробовал один и тот же бит кода с разными данными, и он работает нормально. Я задавался вопросом, был ли это размер данных (поскольку первая попытка была с очень большими данными), но я не понимаю, почему это имело бы значение, если бы вызов ударил по контроллеру.

1 Ответ

1 голос
/ 15 февраля 2011

Если вы хотите увидеть реальное исключение на стороне сервера, это может вам помочь:

http://msdn.microsoft.com/en-us/library/ee844556(v=VS.95).aspx

Любой из описанных подходов, вероятно, осветил бы реальную проблему.

...