Вчера показывал как создать трехуровневое приложение с транспортом на web-сервисах. Времени заняло это ровно 30 минут, вместе с объяснениями. Так как возник вопрос: а есть ли этот пример в блоге? Решил его добавить.
Итак, под трехуровневым приложением понимаем, систему, включающую базу данных, уровень доступа к данным (здесь же может быть спрятана бизнес-логика) и клиентское приложение.
Как это выглядит:
В качестве базы данных воспользуемся MS SQL сервером, в котором в базу Works я создал следующую табличку:
Для демонстрации работы через хранимые процедуры, добавим процедуру выборки и процедуру удаления работы по ее Id:
Создадим 3 проекта: уровень доступа к данным (dll), уровень бизнес-логики, он же публикации данных (web-сервис) и клиентское приложение (Console Application).
Итак, начнем с dll.
Создаем Class Library (не забыв выбрать Framework 3.5), в котором единственный класс будет иметь вид:
Создаем ASP .Net Web Service Application (а этот тип проектов поддерживает только framework 3.5, и именно по этой причине, dll должна быть тоже версии 3.5). Добавляем ссылку на проект с DAL-ом, и пишем перевызов методов:
Создаем третий проект Console Application (версия framework должна быть не меньше 3.5).
В нем, добавляем Service Reference на наш web-сервис. Имя для namespace я дал DataBase. Помните что строка подключения у нас в буфере?
Итак, класс Program может иметь вид:
Запускаем, и видим:
Вот, собственно, и все.
P.s. при следующем открытии Visual Studio консольное приложение будет падать с ошибкой. т.к. не будет видеть web-сервиса. Для того чтобы опять заработало есть два варианта:
1. Опять сделать StartUp приложением сервис, запуститься, сделать StartUp клиенту и запустить его.
2. В свойствах Solution настроить массовый запуск проектов:
должно выглядеть как то так:
Итак, под трехуровневым приложением понимаем, систему, включающую базу данных, уровень доступа к данным (здесь же может быть спрятана бизнес-логика) и клиентское приложение.
Как это выглядит:
В качестве базы данных воспользуемся MS SQL сервером, в котором в базу Works я создал следующую табличку:
Для демонстрации работы через хранимые процедуры, добавим процедуру выборки и процедуру удаления работы по ее Id:
CREATE PROCEDURE man_Work_Sel_All AS
BEGIN
SELECT * from Work
END
иCREATE PROCEDURE man_Work_Del_Id
@p_Id int
AS
BEGIN
delete Work where ID_Work = @p_Id
END
Теперь собственно к программной части.Создадим 3 проекта: уровень доступа к данным (dll), уровень бизнес-логики, он же публикации данных (web-сервис) и клиентское приложение (Console Application).
Итак, начнем с dll.
Создаем Class Library (не забыв выбрать Framework 3.5), в котором единственный класс будет иметь вид:
public static class DataBase
{
static string _connectionString = "";
static DataBase()
{
// Строка подключения может быть взята из конфига или еще от куда то
_connectionString = "Data Source=(local);Initial Catalog=Works;Integrated Security=True";
}
public static DataSet man_Work_Sel_All()
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = new SqlCommand("man_Work_Sel_All", connection);
command.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet result = new DataSet();
adapter.Fill(result);
return result;
}
}
public static void man_Work_Del_Id(int p_id)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = new SqlCommand("man_Work_Del_Id", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@p_Id", SqlDbType.Int);
command.Parameters["@p_Id"].Value = p_id;
try
{
connection.Open();
command.ExecuteNonQuery();
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
}
}
Создаем ASP .Net Web Service Application (а этот тип проектов поддерживает только framework 3.5, и именно по этой причине, dll должна быть тоже версии 3.5). Добавляем ссылку на проект с DAL-ом, и пишем перевызов методов:
[WebMethod]
public DataSet man_Work_Sel_All()
{
return DataBase.man_Work_Sel_All();
}
[WebMethod]
public void man_Work_Del_Id(int p_id)
{
DataBase.man_Work_Del_Id(p_id);
}После того, как написали, не забываем сделать его StartUp приложением и запустить, скопировав в буфер обмена строку подключения к нашему сервису.У меня это "http://localhost:2335/Service1.asmx".
Создаем третий проект Console Application (версия framework должна быть не меньше 3.5).
В нем, добавляем Service Reference на наш web-сервис. Имя для namespace я дал DataBase. Помните что строка подключения у нас в буфере?
Итак, класс Program может иметь вид:
class Program
{
static void Main(string[] args)
{
DataBase.Service1SoapClient client = new DataBase.Service1SoapClient();
ShowWorks(client);
Console.WriteLine("-------------");
client.man_Work_Del_Id(6);
ShowWorks(client);
Console.ReadKey();
}
private static void ShowWorks(DataBase.Service1SoapClient client)
{
DataSet ds = client.man_Work_Sel_All();
foreach (DataRow item in ds.Tables[0].Rows)
{
Console.WriteLine("{0} {1} {2}", item[0], item[1], item[2]);
}
}
}
Делаем наше приложение StartUp и после чего наше решение должно принять вид:Запускаем, и видим:
Вот, собственно, и все.
P.s. при следующем открытии Visual Studio консольное приложение будет падать с ошибкой. т.к. не будет видеть web-сервиса. Для того чтобы опять заработало есть два варианта:
1. Опять сделать StartUp приложением сервис, запуститься, сделать StartUp клиенту и запустить его.
2. В свойствах Solution настроить массовый запуск проектов:
должно выглядеть как то так:
Комментариев нет:
Отправить комментарий