Silverlight + Blibliothèque de classe RIA Services
-
mercredi 18 avril 2012 20:39
Bonjour,
J'ai tenté de suivre les conseils de ce lien :
http://msdn.microsoft.com/fr-fr/library/ee707351(v=vs.91).aspx
Je voulais absolument dissocier le management de ma source de donnée (une base SQL Server) avec mes interfaces web silverlight.
Le projet compile bien, je n'ai pas d'erreur.
J'ai ajouté une grille reliée à une de mes tables pour tester.
Une erreur code 4004 se déclenche au runtime sur le load de ma table:
"System.ServiceModel.DomainServices.Client.DomainOperationException: Échec de l'opération Load pour la requête « GetAS_Langue ». Le serveur distant a retourné une erreur : NotFound. ---> System.ServiceModel.CommunicationException: Le serveur distant a retourné une erreur : NotFound. ---> System.Net.WebException: Le serveur distant a retourné une erreur : NotFound. ---> System.Net.WebException: Le serveur distant a retourné une erreur : NotFound. à System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) à System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState) à System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState) --- Fin de la trace de la pile d'exception interne --- à System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) à System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) à System.ServiceModel.Channels.HttpChann
elFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) --- Fin de la trace de la pile d'exception interne --- à System.ServiceModel.DomainServices.Client.WebDomainClient`1.EndQueryCore(IAsyncResult asyncResult) à System.ServiceModel.DomainServices.Client.DomainClient.EndQuery(IAsyncResult asyncResult) à System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult) --- Fin de la trace de la pile d'exception interne ---"
FB
- Modifié FrançoisBOSSANT jeudi 19 avril 2012 19:16
Toutes les réponses
-
mercredi 18 avril 2012 20:41
<navigation:Page x:Class="MBNet.Home" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" Title="Home" xmlns:my="clr-namespace:MB_RIALib.Web;assembly=MB_RIALib"> <Grid x:Name="LayoutRoot" > <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:AS_Langue, CreateList=true}" Height="0" Name="AS_LangueDomainDataSource" QueryName="GetAS_LangueQuery" Width="0"> <riaControls:DomainDataSource.DomainContext> <my:ADM_DomainContext /> </riaControls:DomainDataSource.DomainContext> </riaControls:DomainDataSource> <data:DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" ItemsSource="{Binding ElementName=AS_LangueDomainDataSource, Path=Data}" Margin="112,129,0,0" Name="AS_LangueDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="400"> <data:DataGrid.Columns> <data:DataGridTextColumn x:Name="CodeLangueColumn" Binding="{Binding Path=CodeLangue}" Header="Code Langue" Width="SizeToHeader" /> <data:DataGridCheckBoxColumn x:Name="DefautColumn" Binding="{Binding Path=Defaut}" Header="Defaut" Width="SizeToHeader" /> <data:DataGridTextColumn x:Name="IdLangueColumn" Binding="{Binding Path=idLangue, Mode=OneWay}" Header="Id Langue" IsReadOnly="True" Width="SizeToHeader" /> <data:DataGridTextColumn x:Name="LibelleFRColumn" Binding="{Binding Path=LibelleFR}" Header="Libelle FR" Width="SizeToHeader" /> <data:DataGridTextColumn x:Name="LibelleOrigineColumn" Binding="{Binding Path=LibelleOrigine}" Header="Libelle Origine" Width="SizeToHeader" /> <data:DataGridTextColumn x:Name="OrdreColumn" Binding="{Binding Path=Ordre}" Header="Ordre" Width="SizeToHeader" /> <data:DataGridCheckBoxColumn x:Name="SiteColumn" Binding="{Binding Path=Site}" Header="Site" Width="SizeToHeader" /> <data:DataGridCheckBoxColumn x:Name="TraduireColumn" Binding="{Binding Path=Traduire}" Header="Traduire" Width="SizeToHeader" /> <data:DataGridCheckBoxColumn x:Name="USColumn" Binding="{Binding Path=US}" Header="US" Width="SizeToHeader" /> </data:DataGrid.Columns> </data:DataGrid> </Grid> </navigation:Page>FB
-
mercredi 18 avril 2012 20:41
Imports System.Collections.Generic Imports System.Linq Imports System.Net Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Documents Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Animation Imports System.Windows.Navigation Imports System.Windows.Shapes Imports System.ServiceModel.DomainServices.Client Imports MB_RIALib.Web Partial Public Class Home Inherits Page Public Sub New() InitializeComponent() End Sub ' Executes when the user navigates to this page. Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs) End Sub Private Sub Page_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 'Ne chargez pas vos données au moment du design. If Not (System.ComponentModel.DesignerProperties.GetIsInDesignMode(Me)) Then End If End Sub Private Sub AS_LangueDomainDataSource_LoadedData(sender As System.Object, e As System.Windows.Controls.LoadedDataEventArgs) Handles AS_LangueDomainDataSource.LoadedData If e.HasError Then System.Windows.MessageBox.Show(e.Error.ToString, "Load Error", System.Windows.MessageBoxButton.OK) e.MarkErrorAsHandled() End If End Sub End Class
FB
- Modifié FrançoisBOSSANT mercredi 18 avril 2012 21:34
-
mercredi 18 avril 2012 21:51
Je pense que ceci vient de ma connextionString. J'ai laissé VS2010 la générer mais je la trouve étrange.
Voici l'APP.Config de la bibliothèque :
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </modules> <validation validateIntegratedModeConfiguration="false" /> </system.webServer> <system.diagnostics> <sources> <!-- Cette section définit la configuration de l'enregistrement dans le fichier journal de My.Application.Log --> <source name="DefaultSource" switchName="DefaultSwitch"> <listeners> <add name="FileLog" /> <!-- Supprimez les marques de commentaire dans la section suivante pour écrire dans le journal des événements de l'application --> <!--<add name="EventLog"/>--> </listeners> </source> </sources> <switches> <add name="DefaultSwitch" value="Information" /> </switches> <sharedListeners> <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" /> <!-- Supprimez les marques de commentaire dans la section suivante et remplacez APPLICATION_NAME par le nom de votre application à écrire dans le journal des événements de l'application --> <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> --> </sharedListeners> </system.diagnostics> <system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.web> <httpModules> <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </httpModules> </system.web> <connectionStrings> <add name="Chastra_ADMEntities" connectionString="metadata=res://*/ADM_Model.csdl|res://*/ADM_Model.ssdl|res://*/ADM_Model.msl;provider=System.Data.SqlClient;provider connection string="data source=MB-W764\SQLEXPRESS;initial catalog=Chastra_ADM;Persist Security Info=True;User ID=Chastra;Password=****;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> <add name="Chastra_DATAEntities" connectionString="metadata=res://*/Data_Model.csdl|res://*/Data_Model.ssdl|res://*/Data_Model.msl;provider=System.Data.SqlClient;provider connection string="data source=MB-W764\SQLEXPRESS;initial catalog=Chastra_DATA;Persist Security Info=True;User ID=Chastra;Password=****;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration>FB
-
jeudi 19 avril 2012 19:18
Personne peux m'aider sur cette erreur 4004 ?
Bon... Ben je sens que mon plan avec Silverlight va tomber à l'eau...
Dois je chercher une autre solution?
FB
-
jeudi 19 avril 2012 22:31
no panique !
Tu peux nous montrer le code de ton DomainService stp, notament ta méthode GetAS_Langue ?
-
vendredi 20 avril 2012 08:30
Option Compare Binary Option Infer On Option Strict On Option Explicit On Imports MBRIALib.Web Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.ComponentModel.DataAnnotations Imports System.Data Imports System.Linq Imports System.ServiceModel.DomainServices.EntityFramework Imports System.ServiceModel.DomainServices.Hosting Imports System.ServiceModel.DomainServices.Server 'Implémente la logique d'application à l'aide du contexte Chastra_ADMEntities. ' TODO: ajoutez votre logique d'application à ces méthodes ou dans d'autres méthodes. ' TODO: connectez l'authentification (Windows/ASP.NET Forms) et supprimez les marques de commentaire suivantes pour désactiver l'accès anonyme ' Ajoutez également des rôles pour limiter l'accès, selon le cas. '<RequiresAuthentication> _ <EnableClientAccess()> _ Public Class MB_ADM_DomainService Inherits LinqToEntitiesDomainService(Of Chastra_ADMEntities) 'TODO: ' appliquez une contrainte aux résultats de votre méthode query. Si vous avez besoin d'une entrée supplémentaire, vous pouvez ' ajouter des paramètres à cette méthode ou créer d'autres méthodes query avec des noms différents. 'Pour prendre en charge la pagination, vous devez ajouter un classement à la requête « AS_Langue ». Public Function GetAS_Langue() As IQueryable(Of AS_Langue) Return Me.ObjectContext.AS_Langue End Function Public Sub InsertAS_Langue(ByVal aS_Langue As AS_Langue) If ((aS_Langue.EntityState = EntityState.Detached) _ = false) Then Me.ObjectContext.ObjectStateManager.ChangeObjectState(aS_Langue, EntityState.Added) Else Me.ObjectContext.AS_Langue.AddObject(aS_Langue) End If End Sub Public Sub UpdateAS_Langue(ByVal currentAS_Langue As AS_Langue) Me.ObjectContext.AS_Langue.AttachAsModified(currentAS_Langue, Me.ChangeSet.GetOriginal(currentAS_Langue)) End Sub Public Sub DeleteAS_Langue(ByVal aS_Langue As AS_Langue) If ((aS_Langue.EntityState = EntityState.Detached) _ = false) Then Me.ObjectContext.ObjectStateManager.ChangeObjectState(aS_Langue, EntityState.Deleted) Else Me.ObjectContext.AS_Langue.Attach(aS_Langue) Me.ObjectContext.AS_Langue.DeleteObject(aS_Langue) End If End Sub End ClassFB
-
vendredi 20 avril 2012 16:59
Bon, je suis reparti d'un projet vierge.
1) J'ai fait un projhet RIA Service standard : ça marche
2) Je suis passé par une bibliothèque RIA service : MEME Erreur
LA je comprends plus rien
FB
-
vendredi 20 avril 2012 21:19
Bonjour,
Erreur 4004 ou 404 ?
Je vois que l'on parle de fichier App.Config ? Ce ne serait pas plutôt un web.config ? Egalement je vois que la requête semble être appelée "GetAS_LangueQuery". Je soupconne soit qu'une ressource n'est pas du tout trouvée sur le serveur soit que la requête demandée n'est pas trouvée. Un outil comme Fiddler pourrait peut-être aussi aider en permettant d'examiner la requête http envoyée de Silverlight vers le serveur web et la réponse correspondante.
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP vendredi 20 avril 2012 21:19
-
samedi 21 avril 2012 19:53je confirme 4004
FB
-
samedi 21 avril 2012 21:40
Un essai me donne bien la même erreur 4004 si le fichier web.config n'est pas bon. Quid de mon autre question ? Parlez vous bien du fichier web.config lorsque vous donnez le contenu du fichier "app.config de la bibliothèque" (ce qui n'aurait pas de sens une bibliothèque n'ayant pas de fichier de configuration) ?
Suivez par exemple la procédure, donnée ici (C# mais facilement applicable à VB) : http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2010/06/25/silverlight-and-wcf-ria-services-4-ria-services-libraries.aspx.
Vous utilisez le serveur web interne de VS 2010 ? Avec donc le fichier *web.config* suivant dans mon site web de démarrage c'est ok chez moi...
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.web> <httpModules> <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </httpModules> </system.web>Pour l'instant, je pense donc que votre fichier web.config n'est pas correct.
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP samedi 21 avril 2012 21:40
- Modifié Patrice ScribeMVP samedi 21 avril 2012 21:41
- Modifié Patrice ScribeMVP samedi 21 avril 2012 21:44
- Proposé comme réponse Pascal SailleModerator dimanche 22 avril 2012 17:38
- Marqué comme réponse Ciprian Duduiala lundi 23 avril 2012 06:56
- Non marqué comme réponse FrançoisBOSSANT lundi 23 avril 2012 09:37
- Non proposé comme réponse FrançoisBOSSANT lundi 23 avril 2012 16:11
-
lundi 23 avril 2012 09:40
Non, ceci ne semble pas résoudre entièrement mon soucis. Je vais préparer des copies d'écran.
System.ServiceModel.DomainServices.Client.DomainOperationException: Échec de l'opération Load pour la requête « GetAS_Langue ». La connexion nommée spécifiée est introuvable dans la configuration, n'est pas destinée à être utilisée avec le fournisseur EntityClient ou n'est pas valide.
FB
-
lundi 23 avril 2012 16:05
J'ai préféré faire 2 petites vidéos.
La 1ère avec une service WCF RIA dans le projet web : Qui marche !
http://youtu.be/SU1e-r-WmpYLa 2ème avec une bibliothèque de classe RIA services : Qui plante !
FB
- Modifié FrançoisBOSSANT lundi 23 avril 2012 16:18
-
lundi 23 avril 2012 16:40
Donc à ce stade, je pense qu'il faut faire un copier/coller de la chaine de connexion présente dans le fichier app.config du projet "bibliothèque" dans le fichier web.config du site web principal.
VS modifie le fichier app.config car c'est le seul fichier qu'il puisse connaître dans le contexte de ce projet et les outils de conception ont besoin de mémoriser cette chaîne.
Mais comme je disais, à l'exécution, le fichier de configuration utilisé réellement par une bibliothèque est celui de l'application hôte et donc dans ce cas ci, ce sera le fichier web.config du site web qui référence cette bibliothèque.
Faute de cette info, le message indique effectivement que la chaine de connexion demandée n'est pas trouvée dans la configuration de l'appli (en l'occurence le fichier web.config).
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse FrançoisBOSSANT lundi 23 avril 2012 16:45
-
lundi 23 avril 2012 16:43C'était ça !!!! Merci, je comprends vite mais il faut m'expliquer longtemps :)
FB

