Архитектура сервера и SubSonic - PullRequest
0 голосов
/ 19 апреля 2009

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

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

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

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

Br Сорен.

1 Ответ

2 голосов
/ 19 апреля 2009

Если вы хотите использовать subsonic 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>
...