.NET 4.x C# Обмен SOAP сообщениями в формате XMl между клиентом и сервером
Формулировка задачи:
Здравствуйте. Помогите разобраться, необходимо реализовать обмен SOAP сообщениями в формате XMl между клиентом и сервером. Сервер реализован в виде службы, которая взаимодействует с БД. Клиентское приложение обычное WinForms. Клиент должен посылать команды серверу, сервер делает запрос к БД и возвращает клиенту результат запроса. Обмен данными должен происходить в формате xml.
Как вообще реализовать подключение между сервером и клиентом для обмена такими данными? Как отправить какую нибудь команду серверу и получать ответ?
Решение задачи: «.NET 4.x C# Обмен SOAP сообщениями в формате XMl между клиентом и сервером»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.ServiceModel; using System.ServiceModel.Channels; using System.Runtime.Serialization; namespace StudentBase.Client { public partial class MainForm : Form { static IDatabase client = null; public MainForm() { InitializeComponent(); client = ChannelFactory<IDatabase>.CreateChannel(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/DatabaseService")); this.Load += new EventHandler(Form1_Load); btnAdd.Click += new EventHandler(btnAdd_Click); btnFiter.Click += new EventHandler(btnFiter_Click); } void btnFiter_Click(object sender, EventArgs e) { switch (cmbFilter.Text) { case "Имя": FilterByNameAndDisplay(txtFilter.Text); break; case "Возраст": FilterByAgeAndDisplay(txtFilter.Text); break; default: return; } } void FilterByNameAndDisplay(string name) { Student[] list = client.GetStudentByName(name); studentsGridView.DataSource = null; studentsGridView.DataSource = list; } void FilterByAgeAndDisplay(string age) { int a; if (!int.TryParse(age, out a)) { txtFilter.Clear(); MessageBox.Show("Ошибка ввода возраста!", "Error"); return; } Student[] list = client.GetStudentByAge(a); studentsGridView.DataSource = null; studentsGridView.DataSource = list; } void btnAdd_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtName.Text)) { MessageBox.Show("Пустое имя не допускается!", "Error"); return; } int age; if (!int.TryParse(txtAge.Text, out age)) { txtAge.Clear(); MessageBox.Show("Ошибка ввода возраста!", "Error"); return; } Student s = new Student { Name = txtName.Text, Age = age }; txtName.Clear(); txtAge.Clear(); try { client.AddStudent(s); } catch (FaultException ex) { MessageBox.Show(ex.Message, "Error"); return; } studentsGridView.DataSource = null; studentsGridView.DataSource = client.GetAllStudents(); } void Form1_Load(object sender, EventArgs e) { cmbFilter.Items.AddRange(new string[] { "Возраст", "Имя" }); studentsGridView.DataSource = client.GetAllStudents(); } } } [ServiceContract] public interface IDatabase { [OperationContract] Student[] GetStudentByName(string name); [OperationContract] Student[] GetStudentByAge(int age); [OperationContract] Student[] GetAllStudents(); [OperationContract] void AddStudent(Student student); [OperationContract] AddResult AddStudents(Student[] students); } [DataContract] public class Student { [DataMember(Name="Name")] string _name; [DataMember(Name="Age")] int _age; public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age = value; } } } [DataContract] public struct AddResult { [DataMember] public int Added; [DataMember] public int Errored; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д