第一个技巧是让您的 silverlight 与您的 WCF 正确通信。 NOT FOUND 发生在许多情况下。可能是您的 Web 服务没有在 IIS 中运行,也可能是您尝试使用某种违反服务合同的对象进行通信。例如。你的对象有一个“对象”类型的属性,它可以是任何东西。缩小此过程的第一步是安装 Fiddler2 以向您显示客户端和服务器之间的网络流量。
一旦完成,即一旦您确定您的 silverlight 应用程序可以与网络服务器通信,那么您可以采取在您的 asp.net 和 silverlight 应用程序之间进行通信的方法。现在,请记住 Silverlight 在客户端上运行,而 asp.net 在服务器上运行,因此,从页面后面的 aspx 代码到 silverlight light 对象的通信必须通过某种通用代理进行 - 该代理是 JavaScript。定义一个 javascript 方法,该方法将访问到 silverlight/object 容器的桥并传递该方法。反之亦然,定义一个允许 silverlight 与 javascript 对话的方法。
例如,假设您有一个以silverlight 显示在您的aspx/html 页面上的类别列表。最有可能的是,该类别列表存在于您的 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);
}
定义 SelectCategory 方法:
[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 对象。
享受吧。