첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestSolution.zip
다운로드

[TestServer 프로젝트]

▶ ISimpleService.cs

using System.Collections.Generic;
using System.ServiceModel;

namespace TestServer
{
    /// <summary>
    /// 단순 서비스
    /// </summary>
    [ServiceContract]
    public interface ISimpleService
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        #region 짝수 번호 리스트 구하기 - GetEvenNumberList()

        /// <summary>
        /// 짝수 번호 리스트 구하기
        /// </summary>
        /// <returns>짝수 번호 리스트</returns>
        [OperationContract]
        List<int> GetEvenNumberList();

        #endregion
        #region 홀수 번호 리스트 구하기 - GetOddNumberList()

        /// <summary>
        /// 홀수 번호 리스트 구하기
        /// </summary>
        /// <returns>홀수 번호 리스트</returns>
        [OperationContract]
        List<int> GetOddNumberList();

        #endregion
    }
}

 

728x90

 

▶ SimpleService.cs

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace TestServer
{
    /// <summary>
    /// 단순 서비스
    /// </summary>
    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession)]
    public class SimpleService : ISimpleService
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 짝수 번호 리스트 구하기 - GetEvenNumberList()

        /// <summary>
        /// 짝수 번호 리스트 구하기
        /// </summary>
        /// <returns>짝수 번호 리스트</returns>
        public List<int> GetEvenNumberList()
        {
            Console.WriteLine
            (
                "[{0}] 짝수 번호 리스트 구하기 스레드 {1}가 시작되었습니다.",
                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                Thread.CurrentThread.ManagedThreadId
            );

            List<int> listEvenNumberList = new List<int>();

            for(int i = 0; i <= 10; i++)
            {
                Thread.Sleep(200);

                if(i % 2 == 0)
                {
                    listEvenNumberList.Add(i);
                }
            }

            Console.WriteLine
            (
                "[{0}] 짝수 번호 리스트 구하기 스레드 {1}가 완료되었습니다.",
                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                Thread.CurrentThread.ManagedThreadId
            );

            return listEvenNumberList;
        }

        #endregion
        #region 홀수 번호 리스트 구하기 - GetOddNumberList()

        /// <summary>
        /// 홀수 번호 리스트 구하기
        /// </summary>
        /// <returns>홀수 번호 리스트</returns>
        public List<int> GetOddNumberList()
        {
            Console.WriteLine
            (
                "[{0}] 홀수 번호 리스트 구하기 스레드 {1}가 시작되었습니다.",
                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                Thread.CurrentThread.ManagedThreadId
            );

            List<int> listOddNumberList = new List<int>();

            for(int i = 0; i <= 10; i++)
            {
                Thread.Sleep(200);

                if(i % 2 != 0)
                {
                    listOddNumberList.Add(i);
                }
            }

            Console.WriteLine
            (
                "[{0}] 홀수 번호 리스트 구하기 스레드 {1}가 완료되었습니다.",
                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                Thread.CurrentThread.ManagedThreadId
            );

            return listOddNumberList;
        }

        #endregion
    }
}

 

300x250

 

▶ Program.cs

using System;
using System.ServiceModel;
 
namespace TestServer
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        ////////////////////////////////////////////////////////////////////////////////////////// Method
        //////////////////////////////////////////////////////////////////////////////// Static
        ////////////////////////////////////////////////////////////////////// Private
 
        #region 프로그램 시작하기 - Main()
 
        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            using(ServiceHost serviceHost = new ServiceHost(typeof(SimpleService)))
            {
                serviceHost.Open();
 
                Console.WriteLine("서버가 시작되었습니다 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 
                Console.ReadKey(true);
            }
        }
 
        #endregion
    }
}

 

▶ App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="mexBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="TestServer.SimpleService" behaviorConfiguration="mexBehavior">
                <endpoint
                    address="SimpleService"
                    binding="netTcpBinding"
                    contract="TestServer.ISimpleService" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8080" />
                        <add baseAddress="net.tcp://localhost:8090" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

 

[TestClient 프로젝트]

▶ MainForm.cs

using System;
using System.ComponentModel;
using System.Windows.Forms;

using TestClient.SimpleService;

namespace TestClient
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : Form
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 클라이언트
        /// </summary>
        private SimpleServiceClient client;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            this.client = new SimpleServiceClient("NetTcpBinding_ISimpleService");

            this.getEvenNumberListButton.Click += getEvenNumberListButton_Click;
            this.getOddNumberListButton.Click  += getOddNumberListButton_Click;
            this.clearResultButton.Click       += clearResultButton_Click;

            this.oddNumberBackgroundWorker.DoWork              += oddNumberBackgroundWorker_DoWork;
            this.oddNumberBackgroundWorker.RunWorkerCompleted  += oddNumberBackgroundWorker_RunWorkerCompleted;
            this.evenNumberBackgroundWorker.DoWork             += evenNumberBackgroundWorker_DoWork;
            this.evenNumberBackgroundWorker.RunWorkerCompleted += evenNumberBackgroundWorker_RunWorkerCompleted;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 짝수 번호 리스트 구하기 버튼 클릭시 처리하기 - getEvenNumberListButton_Click(sender, e)

        /// <summary>
        /// 짝수 번호 리스트 구하기 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void getEvenNumberListButton_Click(object sender, EventArgs e)
        {
            this.evenNumberBackgroundWorker.RunWorkerAsync();
        }

        #endregion
        #region 홀수 번호 리스트 구하기 버튼 클릭시 처리하기 - getOddNumberListButton_Click(sender, e)

        /// <summary>
        /// 홀수 번호 리스트 구하기 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void getOddNumberListButton_Click(object sender, EventArgs e)
        {
            this.oddNumberBackgroundWorker.RunWorkerAsync();
        }

        #endregion
        #region 결과 지우기 버튼 클릭시 처리하기 - clearResultButton_Click(sender, e)

        /// <summary>
        /// 결과 지우기 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void clearResultButton_Click(object sender, EventArgs e)
        {
            this.evenNumberListBox.DataSource = null;
            this.oddNumberListBox.DataSource = null;
        }

        #endregion

        #region 짝수 번호 백그라운드 작업자 작업 처리하기 - evenNumberBackgroundWorker_DoWork(sender, e)

        /// <summary>
        /// 짝수 번호 백그라운드 작업자 작업 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void evenNumberBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = this.client.GetEvenNumberList();
        }

        #endregion
        #region 짝수 번호 백그라운드 작업자 작업 완료시 처리하기 - evenNumberBackgroundWorker_RunWorkerCompleted(sender, e)

        /// <summary>
        /// 짝수 번호 백그라운드 작업자 작업 완료시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void evenNumberBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.evenNumberListBox.DataSource = (int[])e.Result;
        }

        #endregion
        #region 홀수 번호 백그라운드 작업자 작업 처리하기 - oddNumberBackgroundWorker_DoWork(sender, e)

        /// <summary>
        /// 홀수 번호 백그라운드 작업자 작업 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void oddNumberBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = this.client.GetOddNumberList();
        }

        #endregion
        #region 홀수 번호 백그라운드 작업자 작업 완료시 처리하기 - oddNumberBackgroundWorker_RunWorkerCompleted(sender, e)

        /// <summary>
        /// 홀수 번호 백그라운드 작업자 작업 완료시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void oddNumberBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.oddNumberListBox.DataSource = (int[])e.Result;
        }

        #endregion
    }
}

 

▶ App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_ISimpleService" />
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint
                address="net.tcp://localhost:8090/SimpleService"
                binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_ISimpleService"
                contract="SimpleService.ISimpleService"
                name="NetTcpBinding_ISimpleService">
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요