.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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д