Я не совсем уверен, как это объяснить, но в основном я пытаюсь использовать приложение 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
Я только что попробовал один и тот же бит кода с разными данными, и он работает нормально. Я задавался вопросом, был ли это размер данных (поскольку первая попытка была с очень большими данными), но я не понимаю, почему это имело бы значение, если бы вызов ударил по контроллеру.