第一個竅門是讓你的silverlight與你的WCF正確溝通。 NOT FOUND發生在許多情況下。可能是因爲您的Web服務未在IIS中運行,可能是因爲您嘗試使用某種違反服務合同的對象進行通信。例如。你的對象有一個「對象」類型的屬性,可以是任何東西。縮小這一過程的第一步是安裝Fiddler2,向您顯示客戶端和服務器之間的網絡流量。
一旦做到這一點,即一旦你確定你的Silverlight應用程序可以與Web服務器進行通信,那麼你就可以把你的asp.net和Silverlight應用程序之間進行通信的方法。現在請記住,Silverlight在客戶端上運行,並且asp.net在服務器上運行,因此,從頁面背後的代碼與Silverlight光對象之間的通信必須通過某種常見代理進行 - 代理是JavaScript。定義一個JavaScript方法,該方法將訪問到Silverlight /對象容器的橋接並傳遞該方法。反之亦然,定義一種方法,允許silverlight與javascript進行對話。
例如,假設您的aspx/html頁面上有silverlight中顯示的類別列表。很可能,該類別列表存在於您的asp.net項目的ClientBin文件夾的XAP文件中。
實施例:
<div style="margin:auto; float:left; height:auto;">
<div id="silverlightControlHost_Categoris" style="height:auto;">
<object id="silverlightControl_Categories" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" style="height:100%">
<param name="source" value="ClientBin/Categories.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<param name="ScaleMode" value="Stretch" />
<param name="EnableAutoZoom" value="True" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="Iframe2" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
</div>
接着,在對您的Silverlight項目加載的情況下,登記爲編寫腳本的對象:}
using System.Windows.Browser;
namespace CategoryListing
{
[ScriptableType]
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
categoryListing1.DataContext = new MyLibrary.ViewModel.TCategoryListingViewModel();
//categoryListing1 is the name of the control whose data context is the view model
HtmlPage.RegisterScriptableObject("categoriesBridge", (categoryListing1.DataContext as MyLibrary.ViewModel.TCategoryListingViewModel));
}
}
定義JavaScript方法向一些方法在類別列表查看模式
function selectCategory(category_id) {
var plugin = document.getElementById("silverlightControl_Categories");
//note the reference to the categoriesBridge property that was registered as scriptable
if (plugin != null)
plugin.content.categoriesBridge.SelectCategory(category_id);
}
定義選擇分類方法:
[ScriptableMember]
public void SelectCategory(string category_id)
{
//select the category here
}
如果你想在頁面上從另一個Silverlight的對象調用此方法:
try
{
HtmlWindow window = HtmlPage.Window;
window.Invoke("SelectCategory", new object[] { "Category1" });
}
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }
在這一切結束時,你應該能夠在您的頁面上使用您的html/aspx標記來調用javascript方法來調用silverlight對象。
享受。
如果我的方法不正確,請告訴我一個好的替代方案。 – jjm340 2012-02-22 16:57:24