2009-04-19 4 views
0

Я пытаюсь разработать сервер/клиентское приложение. Сервер будет кучей веб-сервисов, идея заключалась в том, чтобы разоблачить такие методы, как:Архитектура сервера и SubSonic

Компания GetNewCompany(); // Создает новый объект компании
Сохранить (Компания C);
CompanyCollection GetCompany (Query q);

Где объект запроса является частью Subsonic 2.1. Но проблема в том, что SubSonic не построен для этого, я что-то пропустил? или просто невозможно использовать дозвуковой язык запросов над SOAP?

Это была бы отличная функция, потому что тогда очень просто сделать сервер приложений с использованием дозвуковых.

Br Soren.

ответ

2

Если вы хотите использовать дозвуковой v3 вы можете посмотреть на этот вопрос, что говорит о IUpdatable: http://code.google.com/p/subsonicthree/issues/detail?id=30

Это позволит использовать АДО услуги передачи данных несколько безболезненно. Вы используете конструктор БД, который принимает аргумент URI. Вероятно, это не будет частью v3, но вы можете сделать такие изменения самостоятельно.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using WcfClientTest.NorthwindService; 

namespace WcfClientTest 
{ 
    /// <summary> 
    /// Summary description for WcfTest 
    /// To run these tests, load this project, and somehow get a server running at the URI. 
    /// This can be done by updating the service reference to start the development server. 
    /// </summary> 
    [TestClass] 
    public class WcfTest 
    { 
     private string baseURI = "http://127.0.0.1:49649/Northwind.svc"; 
     private DB ctx; 

     /// <summary> 
     /// Sets up test. 
     /// </summary> 
     [TestInitialize] 
     public void SetUp() 
     { 
      ctx = new DB(new Uri(baseURI)); 
     } 

     [TestCleanup] 
     public void Cleanup() 
     { 
     } 

     [TestMethod] 
     public void Select_Simple_With_Variable() 
     { 
      int categoryID = 5; 
      IQueryable<Product> result = from p in ctx.Products 
             where p.CategoryID == categoryID 
             select p; 

      List<Product> products = result.ToList(); 
      Assert.AreEqual(7, products.Count()); 
     } 

     [TestMethod] 
     public void TestAddNew() 
     { 
      // add customer 
      var c = new Customer 
         { 
          CustomerID = "XXXXX", 
          ContactTitle = "Prez", 
          Country = "USA", 
          ContactName = "Big Guy", 
          CompanyName = "Big Guy Company" 
         }; 
      ctx.AddToCustomers(c); 
      ctx.SaveChanges(); 

      IQueryable<Customer> qCustomer = from cust in ctx.Customers 
              where cust.CustomerID == "XXXXX" 
              select cust; 

      Customer c2 = qCustomer.FirstOrDefault(); 

      Assert.AreEqual("XXXXX", c2.CustomerID); 

      if (c2 != null) 
      { 
       ctx.DeleteObject(c2); 
      } 
      ctx.SaveChanges(); 

      IQueryable<Customer> qCustomer2 = from cust in ctx.Customers 
               where cust.ContactName == "Big Guy" 
               select cust; 
      // Returns null if the row isn't found. 
      Customer c3 = qCustomer2.SingleOrDefault(); 
      Assert.AreEqual(null, c3); 
     } 
    } 
} 

И это все, что есть на службу:

using System.Data.Services; 
using Northwind; 

namespace NorthwindService 
{ 
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=false)] 
    public class Northwind: DataService<DB> 
    { 
     // This method is called only once to initialize service-wide policies. 
     public static void InitializeService(IDataServiceConfiguration config) 
     { 
      config.SetEntitySetAccessRule("*", EntitySetRights.All); 
      config.UseVerboseErrors = true; 
     } 
    } 
} 

И web.config:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    </system.serviceModel> 
+0

См: http://blogs.msdn.com/aconrad/ архив/2008/12/05/develop-a-astoria-data-provider-for-subsonic.aspx Вот откуда я его получил. –

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