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 には型の 3 つのメンバーが含まれています。文字列、文字列、およびバイト配列。シリアル化のために、get 部分と set 部分の両方を含むパブリック プロパティを介して 3 つのメンバーすべてを公開しました。また、引数を取らないパブリック コンストラクターも追加しました。

これに関するアドバイスは大歓迎です。

よろしくお願いします。

アップデート

同じコードを異なるデータで試してみたところ、うまくいきました。データのサイズではないかと思いました (最初の試行は非常に大きなデータを使用していたため) が、呼び出しがコントローラーにヒットした場合にそれが問題になる理由がわかりません。

4

1 に答える 1

1

実際のサーバー側の例外を確認したい場合は、次の方法が役立ちます。

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

そこで説明されているどちらのアプローチも、おそらく実際の問題を明らかにするでしょう。

于 2011-02-15T00:35:20.247 に答える