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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы