我不完全确定如何解释这个问题,但基本上我正在尝试使用ASP.NET MVC应用程序中托管的Silverlight应用程序。我在MVC端有一个基本控制器,它包含一个方法,它接受一些字符串参数并返回一个ActionResult(为了这个程序的目的,结果是一些Json数据)。
当我在Silverlight控件中处理WebClient.OpenReadCompleted事件时,我的问题出现了。在此控件中调用WebClient.OpenReadAsync方法时,它成功到达控制器,然后按预期报告回相关的事件处理程序。但是,处理它时,事件参数包含一个错误,指出:“远程服务器返回错误:NotFound。”。
以前,我注意到这是因为我的通讯网址的某些部分不正确 - 在这种情况下不是。从一些谷歌搜索,我也注意到这是一般错误。因此,我很难过。为了让事情更加混乱,我在程序的另一部分中使用这种完全相同的通信尝试,它检索字符串数组,并且完全正常。
请参阅下面的示例代码(由于此程序的性质,我无法发布完整代码)。
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控制器 - 命名为HomeController并使用“Home”访问
public ActionResult GetData()
{
return Json(new Data(), JsonRequestBehaviour.AllowGet);
}
注意 这里,Data包含三个类型的成员;字符串,字符串和字节数组。为了序列化,我通过包含get和set部分的公共属性公开了所有三个成员。我还添加了一个不带参数的公共构造函数。
对此有任何建议将不胜感激。
非常感谢提前。
更新
我刚尝试了不同数据的相同代码,并且工作正常。我想知道它是否是数据的大小(因为第一次尝试是非常大的数据),但我不明白为什么如果呼叫设法击中控制器那将是重要的。
答案 0 :(得分:1)
如果您想查看真正的服务器端异常,这可能会对您有所帮助:
http://msdn.microsoft.com/en-us/library/ee844556(v=VS.95).aspx
这两种方法都可能说明真正的问题。