2009-11-28 13 views
0

Je suis nouveau aux services de données ADO.net (et à .net en général aussi ..), j'ai ce projet où j'ai besoin d'installer un service de données pour lire et écrire dans une base de données avec nHibernate, I ' avons créé le service:Quelles sont les étapes à suivre pour lire un objet à partir d'un service de données ADO.net?

[WebGet] 
    [SingleResult] 
    public Factory Factories(int Id) 
    { 
     try 
     { 
      Factory[] results = this.CurrentDataSource.Session.Linq<Factory>().Where(g => g.Id.Equals(Id)).ToArray(); 
      return results[0]; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     }   

Et j'ai créé un test pour le service:

[Test] 
     public void CanReadFactoryDataService() 
     { 
      DataServiceContext ctx = new 
        DataServiceContext(new Uri("http://localhost:1413/DataService.svc")); 
      var Factories = ctx.Execute<Factory>(
        new Uri("Factories?Id=54", UriKind.Relative)); 
      Assert.IsNotNull(Factories); 
      Factory factory = Factories.First<Factory>(); 
      { 
       Console.WriteLine(factory.NAME); 
      } 

Quand je lance le service avec le navigateur (par exemple: http://localhost:1413/DataService.svc/Factories?Id=54), les retours de service:

<Factories p1:type="ADODS.Core.Factory"> 
<FactorY_CODE>abc</FactorY_CODE> 
<NAME>Nameds</NAME> 
<ADDRESS>Reinhardt strasse</ADDRESS> 
<COMPENSATION_MODEL p1:null="true"/> 
<B_CODE p1:null="true"/> 
<Id p1:type="Edm.Int32">54</Id> 
</Factories> 

Mais quand je lance le test unitaire Je reçois cette exception:

TestCase 'Tests.DataServicesTests.CanReadFactoryDataService' 
failed: System.InvalidOperationException : La secuencia no contiene elementos (The sequence contains no elements) 
    en System.Linq.Enumerable.First[TSource](IEnumerable`1 source) 
    H:\ADODS\tests\ADODS.Tests\ADODS.Web\DataServicesTests.cs(22,0): en Tests.DataServicesTests.CanReadFactoryDataService() 

Je débogués le projet, de sorte que le test se connecte au service et le service renvoie les données, mais

est là quoi d'autre que je devrais faire pour convertir les données xml dans l'objet réel quand je le reçois?

J'ai fait un test, avec un objet string au lieu d'un Factory et cela a fonctionné, le problème semble être avec mes classes. Ai-je oublié quelque chose?

Répondre

0

Enfin je l'ai résolu: J'ai ajouté une référence de service (Wich je n'avais pas fait), et changé le test:

[Test] 
     public void CanReadFactoryDataService() 
     { 
      ServiceReference1.DataServiceContext ctx = new 
        ServiceReference1.DataServiceContext(new Uri("http://localhost:1413/DataService.svc")); 
      var factories= ctx.Execute<Factory>(
        new Uri("Factories?Id=54", UriKind.Relative)); 
      Assert.IsNotNull(factories); 
      Factory factory = factories.First<Factory>(); 
      { 
       Console.WriteLine(factory.ADDRESS); 
      } 

     } 

Et il passe maintenant le test:

Reinhardt strasse 

1 passed, 0 failed, 0 skipped, took 3.48 seconds (NUnit 2.5.2). 

Maintenant, je pense que c'était facile, mais quand vous ne savez pas, c'est dur ...

Questions connexes