Первый трюк состоял бы в том, чтобы заставить ваш серебряный свет правильно общаться с вашим WCF. НЕ НАЙДЕНО происходит по МНОГИМ сценариям. Возможно, ваша веб-служба не работает в IIS, возможно, вы пытаетесь установить связь с помощью какого-либо объекта, который нарушает договор на обслуживание. Например. Ваш объект имеет свойство типа «объект», которое может быть любым. Первым шагом к сужению этого процесса будет установка Fiddler2 для отображения сетевого трафика между вашим клиентом и вашим сервером.
Как только это будет сделано, т. Е. Если вы уверены, что ваше приложение silverlight может обмениваться данными с веб-сервером, вы можете использовать метод связи между вашим asp.net и приложением silverlight. Теперь имейте в виду, что Silverlight запускается на клиенте, а asp.net запускается на сервере, поэтому обмен данными между кодом и aspx за страницей с объектом silverlight light должен происходить через какой-то тип общего прокси-сервера - этот прокси-сервер является JavaScript. Определите метод javascript, который будет обращаться к мосту к контейнеру silverlight / object и передавать метод. И наоборот, определите метод, который позволил бы серебряному свету общаться с javascript.
Например, допустим, у вас есть список категорий, который отображается в серебряном свете на вашей странице aspx / html. Скорее всего, этот список категорий существует в файле XAP в вашей папке ClientBin для вашего проекта asp.net.
Пример:
<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.
Наслаждайтесь.