Silverlight + Blibliothèque de classe RIA Services

已答复 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


Toutes les réponses

  • mercredi 18 avril 2012 20:41
     
      A du code
    <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
     
      A du code
    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


  • mercredi 18 avril 2012 21:51
     
      A du code

    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=&quot;data source=MB-W764\SQLEXPRESS;initial catalog=Chastra_ADM;Persist Security Info=True;User ID=Chastra;Password=****;multipleactiveresultsets=True;App=EntityFramework&quot;" 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=&quot;data source=MB-W764\SQLEXPRESS;initial catalog=Chastra_DATA;Persist Security Info=True;User ID=Chastra;Password=****;multipleactiveresultsets=True;App=EntityFramework&quot;" 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
     
      A du code
    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 Class
    
    


    FB

  • 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".


  • samedi 21 avril 2012 19:53
     
     
    je confirme 4004

    FB

  • samedi 21 avril 2012 21:40
     
      A du code

    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".




  • 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-WmpY

    La 2ème avec une bibliothèque de classe RIA services : Qui plante !

    http://youtu.be/fUDdLJcUiCw


    FB


  • lundi 23 avril 2012 16:40
     
     Traitée

    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".

  • lundi 23 avril 2012 16:43
     
     
    C'était ça !!!! Merci, je comprends vite mais il faut m'expliquer longtemps :)

    FB