2

我不完全确定如何解释这一点,但基本上我正在尝试使用托管在 ASP.NET MVC 应用程序中的 Silverlight 应用程序。我在 MVC 端有一个基本控制器,它包含一个接受一些字符串参数并返回 ActionResult 的方法(对于这个程序,该结果是一些 Json 数据)。

当我在 Silverlight 控件中处理 WebClient.OpenReadCompleted 事件时出现了我的问题。在此控件中调用 WebClient.OpenReadAsync 方法时,它成功到达控制器,然后按预期向相关事件处理程序报告。然而,当它被处理时,事件参数包含一个错误声明:“远程服务器返回一个错误:NotFound。”。

以前,我注意到这是由于我的通信 URL 的某些部分不正确造成的——在这种情况下不是。从一些谷歌搜索中,我还注意到这是一个通用错误。因此,我很困惑。为了让事情更混乱,我在程序的另一部分使用了完全相同的通信尝试,它检索字符串数组,并且工作得非常好。

请参阅下面的示例代码(由于该程序的性质,我无法发布完整代码)。

银光控制

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 部分的公共属性公开了所有三个成员。我还添加了一个不带参数的公共构造函数。

对此的任何建议将不胜感激。

提前谢谢了。

更新

我刚刚用不同的数据尝试了相同的代码,它工作正常。我想知道这是否是数据的大小(因为第一次尝试是使用非常大的数据),但我不明白为什么如果调用成功地击中控制器会很重要。

4

1 回答 1

1

如果您想查看真正的服务器端异常,这可能会对您有所帮助:

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

那里描述的任何一种方法都可能会阐明真正的问题。

于 2011-02-15T00:35:20.247 回答