Le premier tour serait d'obtenir votre silverlight pour communiquer correctement avec votre WCF. NOT FOUND se produit sur BEAUCOUP de scénarios. Il se peut que votre service Web ne s'exécute pas dans IIS, il se peut que vous essayiez de communiquer à l'aide d'un objet qui enfreint le contrat de service. Par exemple. Votre objet a une propriété de type "object" qui peut être n'importe quoi. La première étape pour affiner ce processus serait d'installer Fiddler2 pour vous montrer le trafic réseau entre votre client et votre serveur. Une fois cela fait, c'est-à-dire, une fois que vous êtes sûr que votre application Silverlight peut communiquer avec le serveur Web, alors vous pouvez adopter l'approche de communication entre votre application asp.net et votre application SilverLight. Maintenant, gardez à l'esprit que Silverlight s'exécute sur le client, et asp.net s'exécute sur le serveur, par conséquent, communiquer à partir de la page et du code aspx derrière la page vers un objet Silverlight doit passer par un proxy commun - ce proxy étant JavaScript. Définissez une méthode javascript qui accèderait à un pont vers le conteneur silverlight/object et transmettez la méthode. Et vice versa, définissez une méthode qui permettrait à Silverlight de revenir au javascript. Par exemple, supposons que vous ayez une liste de catégories affichée dans silverlight sur votre page aspx/html. Très probablement, cette liste de catégories existe dans un fichier XAP dans votre dossier ClientBin pour votre projet asp.net.
Exemple:
<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>
Ensuite, dans votre événement chargé pour votre projet Silverlight, inscrivez-vous l'objet comme scriptable:
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));
}
}
}
définir la méthode javascript pour parler à une méthode la liste des catégories voir le modèle
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);
}
Définir la SelectCategory Méthode:
[ScriptableMember]
public void SelectCategory(string category_id)
{
//select the category here
}
Si vous voulez appeler cette méthode d'un autre objet silverlight sur la page:
try
{
HtmlWindow window = HtmlPage.Window;
window.Invoke("SelectCategory", new object[] { "Category1" });
}
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }
A la fin de tout cela, vous devriez être capable d'utiliser votre balisage html/aspx sur votre page pour invoquer la méthode javascript pour appeler l'objet silverlight.
Profitez-en.
Si mon approche n'est pas correcte alors s'il vous plaît laissez-moi savoir quelle serait une bonne alternative. – jjm340