2009-11-28 2 views
0

Я новичок в службах данных ADO.net (и в .net вообще тоже ..), у меня есть этот проект, где мне нужно настроить службу данных для чтения и записи в базу данных с nHibernate, ве создали услугу:Каковы шаги для чтения объекта из службы данных 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; 
     }   

И я создал тест для сервиса:

[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); 
      } 

При запуске службы с помощью браузера (например: http://localhost:1413/DataService.svc/Factories?Id=54), возвращает обслуживание:

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

Но когда я запускаю тест блока я получаю это исключение:

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() 

Я отлажен проект, поэтому тест подключается к услуге и служба возвращает данные, но

есть что-нибудь еще, что я должен сделать, чтобы преобразовать данные xml в фактический объект, когда я его получу?

Я сделал тест с объектом string вместо Factory, и это сработало, проблема, похоже, связана с моими классами. Я что-то упускаю?

ответ

0

Наконец я решил это: Я добавил ссылку службы (Wich я не сделал), и изменил тест:

[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); 
      } 

     } 

И теперь он проходит тест:

Reinhardt strasse 

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

Теперь я думаю, что это было легко, но когда вы не знаете, это сложно ...

 Смежные вопросы

  • Нет связанных вопросов^_^