Web フィードを読み取るためのこの WP7 アプリケーションがあります。フィードをダウンロードし、ローカルに保存して使用するために Async CTP を使用しているため、App をオフラインで使用できます。
Wi-Fi またはセルラーに接続しているときは、すべてうまく機能します。しかし、私がオフラインのとき、エラーで開始時にアプリケーションがクラッシュします:
リモート サーバーがエラーを返しました: NotFound。
コール スタックの場所:
AsyncCTPLibrary_Phone.dll!System.Runtime.CompilerServices.AsyncVoidMethodBulder.SetException.AnonymousMethod_2(オブジェクトの状態)
スタックトレース:
System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod、オブジェクト状態) で System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) で System.Net.WebClient.GetWebResponse (WebRequest 要求、IAsyncResult 結果) で System.Net .WebClient.DownloadBitsResponseCallback(IAsyncResult 結果) で System.Net.Browser.ClientHttpWebRequest.<> c_DisplayClassa.b _8 (オブジェクト状態 2) (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態) System.Threading.ThreadPool.WorkItem.doWork(Object o) で System.Threading.Timer.ring()
理由はありますか?私は何も自動的にダウンロードしていません...
編集:これがコードの開始部分です。オフラインの場合は、Web クライアントの呼び出しを避けるようにしています:
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
MainPage_Init();
}
private async void MainPage_Init()
{
string isConfig = await Load_Config("");
if (isLoaded == false)
{
if (RSS.Parameters.AutoUpdate == "On")
{
string isDataOk = await Refresh_data();
Refresh_ui();
}
else
{
Refresh_ui();
}
isLoaded = true;
}
}
async Task<string> Load_Config(string force)
{
if (!DeviceNetworkInformation.IsNetworkAvailable)
{
MessageBox.Show(RSS.Parameters.MessageNetwork);
//Load Config from IsoStore
return "No Network";
}
else
{
string data = await new WebClient().DownloadStringTaskAsync(url);
return await GetConfig_Save_Local_XML_Async(data);
//Load Config from Web, Save to IsoStore
}
}
private async Task<string> Refresh_data() //load feeds form Internet and save them to IsoStore
{
IsolatedStorageSettings isoStorage = IsolatedStorageSettings.ApplicationSettings;
if (!DeviceNetworkInformation.IsNetworkAvailable)
{
ProgressBarSwitch("off");
MessageBox.Show(RSS.Parameters.MessageNetwork);
}
else
{
foreach (RSSFeedInfo sfi in RSS.Parameters.FeedsInfo)
{
await Load_Web_XML(new Uri(sfi.Web_XML), sfi.Local_XML);
}
isoStorage["SettingsLastUpdate"] = System.DateTime.Now;
isoStorage.Save();
ProgressBarSwitch("off");
}
return "ok";
}
private void Refresh_ui() //load feeds from IsoStore
{
//use local data
}