画像サービスを使用して bing マップから画像を取得していますが、アプリケーションが理由もなく終了することが時々ありましたが、画像サービスが mapuri リクエストのタイムアウトを処理していないことが原因であることがわかりました。
画像を取得:
public static void GetBingMapImage(double longitude, double latitude, Size size, int zoomLevel, ImageryServiceParams imageResponseCallback)
{
var mapUriRequest = new MapUriRequest();
var location = new GeocodeLocation { Latitude = latitude, Longitude = longitude };
// Set credentials using a valid Bing Maps key
mapUriRequest.Credentials = new Credentials();
mapUriRequest.Credentials.ApplicationId = BingMapsKey;
// Set the location of the requested image
mapUriRequest.Center = new GeocodeLocation();
mapUriRequest.Center.Latitude = location.Latitude;
mapUriRequest.Center.Longitude = location.Longitude;
mapUriRequest.Pushpins = new ObservableCollection<ImageryService.Pushpin>();
mapUriRequest.Pushpins.Add(new ImageryService.Pushpin { Location = location, IconStyle = "10" });
// Set the map style and zoom level
var mapUriOptions = new MapUriOptions();
mapUriOptions.Style = MapStyle.AerialWithLabels;
mapUriOptions.ZoomLevel = zoomLevel;
// Set the size of the requested image to match the size of the image control
mapUriOptions.ImageSize = new SizeOfint();
mapUriOptions.ImageSize.Height = Convert.ToInt16(size.Height);
mapUriOptions.ImageSize.Width = Convert.ToInt16(size.Width);
mapUriRequest.Options = mapUriOptions;
var imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService");
imageryService.GetMapUriCompleted += ImageryServiceGetMapUriCompleted;
imageryService.GetMapUriAsync(mapUriRequest, imageResponseCallback);
}
ここでの応答:
public MyApplication.ImageryService.MapUriResponse EndGetMapUri(System.IAsyncResult result) {
object[] _args = new object[0];
MyApplication.ImageryService.MapUriResponse _result = ((MyApplication.ImageryService.MapUriResponse)(base.EndInvoke("GetMapUri", _args, result)));
return _result;
例外:
「http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc」への HTTP リクエストが、割り当てられたタイムアウトの 00:01:00 を超えました。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。
これは、リクエストの後にブレーク ポイントを設定し、そこで 1 分ほど待機することで簡単に再現できます。
この例外を処理するにはどうすればよいですか。このトピックに関連する解決策も質問も見つかりませんでした...
ここでもこの問題について話している: http://forums.create.msdn.com/forums/p/103502/616465.aspx#616465
前もって感謝します。