.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;
}