これを説明する方法がよくわかりませんが、基本的には、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 つのメンバーすべてを公開しました。また、引数を取らないパブリック コンストラクターも追加しました。
これに関するアドバイスは大歓迎です。
よろしくお願いします。
アップデート
同じコードを異なるデータで試してみたところ、うまくいきました。データのサイズではないかと思いました (最初の試行は非常に大きなデータを使用していたため) が、呼び出しがコントローラーにヒットした場合にそれが問題になる理由がわかりません。