2012-02-27 94 views
0

我對Silverlight和WCF RIA服務非常陌生,所以請原諒我的誤解。 我的SL客戶端中有一個telerik地圖組件,它使用來自地圖服務器的tiles地址。我想實現我的自定義提供程序,所以我實現了此方法:我的WCF RIA服務是什麼?

protected override Uri GetTile(int tileLevel, int tilePositionX, int tilePositionY) 
    { 
     int zoomLevel = ConvertTileToZoomLevel(tileLevel); 

     string url = this.tileUrlFormat; 

     url = ProtocolHelper.SetScheme(url); 
     url = url.Replace("{zoom}", zoomLevel.ToString(CultureInfo.InvariantCulture)); 
     url = url.Replace("{x}", tilePositionX.ToString(CultureInfo.InvariantCulture)); 
     url = url.Replace("{y}", tilePositionY.ToString(CultureInfo.InvariantCulture)); 
     url = url.Replace("{type}", googleTileType.ToString()); 
     return new Uri(url); 
    } 

它可與在線地圖服務器一起使用。但是,我想使用我自己的存儲在sql server數據庫中的磁貼。

那麼,我該怎麼做呢?我的意思是我如何在我的web項目中實現WCF RIA服務,以便我的SL客戶端調用它的url?我發現了許多在Web項目中定義域服務並在SL中使用它的例子,但是我想知道它是什麼網址? 例如,如果我實現一個域服務,它獲得x,y,縮放參數並從數據庫中檢索它的tile,它是什麼URL,以便我可以在我的SL組件中調用它? 我還有一個問題。如果可以這樣做,是否可以通過認證我的用戶來調用該服務?如何?

回答

1

您不應該使用WCF RIA服務來查詢磁貼。您需要在接收縮放參數x,y和type的服務器上實現get方法,並返回適當的圖像。

例如,如果你在服務器ASP MVC使用,get函數是:

namespace MvcMap.Controllers 
{ 
    public class MapTile : Controller 
    { 
     public ActionResult GetTile(int zoom, int x, int y, string type="") 
     { 
      // Add your action logic here 
      // return your image 
     } 
    } 
} 

鏈接直接調用這個MVC動作類似於:

http://yourdomain_or_ip/MapTile/GetTile?zoom=10&x=5&y10