첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 클라이언트/서버 만들기 - 데이터 계약 사용하기

----------------------------------------------------------------------------------------------------

BookInfo.cs (서버)

 

 

using System.Runtime.Serialization;

 

namespace TestProject

{

    /// <summary>

    /// 도서 정보

    /// </summary>

    [DataContract(Namespace = "http://company.com/bookstore/data")]

    public class BookInfo

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region Field

 

        /// <summary>

        /// ISBN

        /// </summary>

        [DataMember(IsRequired = true, Order = 2)]

        public readonly string ISBN;

 

        /// <summary>

        /// 저자

        /// </summary>

        [DataMember(Order = 3)]

        public string Author;

 

        [DataMember(Order = 4)]

        public int Price;

 

        /// <summary>

        /// 마진율

        /// </summary>

        public double MarginRate;

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 제목

        /// </summary>

        private string title;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 제목 - Title

 

        /// <summary>

        /// 제목

        /// </summary>

        [DataMember(Order = 1)]

        public string Title

        {

            get

            {

                return this.title;

            }

            set

            {

                this.title = value;

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - BookInfo(title, isbn, author, price)

 

        /// <summary>

        /// 생성자

        /// </summary>

        /// <param name="title">제목</param>

        /// <param name="isbn">IBSN</param>

        /// <param name="author">저자</param>

        /// <param name="price">가격</param>

        public BookInfo(string title, string isbn, string author, int price)

        {

            this.title      = title;

            this.ISBN       = isbn;

            this.Author     = author;

            this.Price      = price;

            this.MarginRate = 0.25;

        }

 

        #endregion

    }

}

 

 

IBookStore.cs (서버)

 

 

using System.ServiceModel;

 

namespace TestProject

{

    /// <summary>

    /// 상점 인터페이스

    /// </summary>

    [ServiceContract(Namespace = "http://company.com/bookstore")]

    public interface IBookStore

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        

        #region 도서 정보 구하기 - GetBookInfo(isbn)

 

        /// <summary>

        /// 도서 정보 구하기

        /// </summary>

        /// <param name="isbn">ISBN</param>

        /// <returns>도서 정보</returns>

        [OperationContract]

        BookInfo GetBookInfo(string isbn);

 

        #endregion

    }

}

 

 

BookStoreService.cs (서버)

 

 

using System.Collections.Generic;

using System.ServiceModel;

 

namespace TestProject

{

    /// <summary>

    /// 상점 서비스

    /// </summary>

    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]

    public class BookStoreService : IBookStore

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 도서 정보 딕셔너리

        /// </summary>

        private static Dictionary<string, BookInfo> _bookInfoDictionary = new Dictionary<string, BookInfo>();

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Static

 

        #region 생성자 - BookStoreService()

 

        /// <summary>

        /// 생성자

        /// </summary>

        static BookStoreService()

        {

            _bookInfoDictionary.Add("000-001", new BookInfo("도서01", "000-001", "저자01", 40000));

            _bookInfoDictionary.Add("000-002", new BookInfo("도서02", "000-002", "저자02", 42000));

            _bookInfoDictionary.Add("000-003", new BookInfo("도서03", "000-003", "저자03", 53000));

            _bookInfoDictionary.Add("000-004", new BookInfo("도서04", "000-004", "저자04", 37000));

            _bookInfoDictionary.Add("000-005", new BookInfo("도서05", "000-005", "저자05", 18000));

            _bookInfoDictionary.Add("000-006", new BookInfo("도서06", "000-006", "저자06", 20000));

            _bookInfoDictionary.Add("000-007", new BookInfo(null    , "000-007", null    , 20000));

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 도서 정보 구하기 - GetBookInfo(isbn)

 

        /// <summary>

        /// 도서 정보 구하기

        /// </summary>

        /// <param name="isbn">ISBN</param>

        /// <returns>도서 정보</returns>

        public BookInfo GetBookInfo(string isbn)

        {

            if(_bookInfoDictionary.ContainsKey(isbn) == true)

            {

                return _bookInfoDictionary[isbn];

            }

            else

            {

                return null;

            }

        }

 

        #endregion

    }

}

 

 

Program.cs (서버)

 

 

using System;

using System.ServiceModel;

using System.ServiceModel.Description;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    public class Porgram

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        static void Main()

        {

            Console.WriteLine("데이터 계약 테스트 서버를 시작합니다...");

 

            ServiceHost serviceHost = new ServiceHost(typeof(BookStoreService), new Uri("http://localhost/wcf/bookstoreservice"));

 

            serviceHost.AddServiceEndpoint(typeof(IBookStore), new BasicHttpBinding(), string.Empty);

 

            ServiceMetadataBehavior serviceMetadataBehavior = new ServiceMetadataBehavior();

 

            serviceMetadataBehavior.HttpGetEnabled = true;

 

            serviceHost.Description.Behaviors.Add(serviceMetadataBehavior);

 

            serviceHost.Open();

 

            Console.WriteLine("서비스 중단을 위해 아무 키나 누르세요...");

 

            Console.ReadKey(true);

 

            serviceHost.Close();

        }

 

        #endregion

    }

}

 

 

Program.cs (클라이언트)

 

 

using System;

 

using TestProject.BookStore;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    public class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main()

        {

            Console.WriteLine("데이터 계약 테스트 클라이언트를 시작합니다...");

 

            using(BookStoreClient bookStoreClient = new BookStoreClient())

            {

                BookInfo bookInfo = bookStoreClient.GetBookInfo("000-005");

 

                Console.WriteLine

                (

                    "도서 정보 :\n            제목={0}\n            저자={1}\n            ISBN={2}\n            가격={3:#,##0}원",

                    bookInfo.Title,

                    bookInfo.Author,

                    bookInfo.ISBN,

                    bookInfo.Price

                );

 

                bookInfo = bookStoreClient.GetBookInfo("000-007");

 

                Console.WriteLine

                (

                    "도서 정보 :\n            제목={0}\n            저자={1}\n            ISBN={2}\n            가격={3:#,##0}원",

                    bookInfo.Title,

                    bookInfo.Author,

                    bookInfo.ISBN,

                    bookInfo.Price

                );

            }

        }

 

        #endregion

    }

}

 

※ BookStoreClient 클래스는 서비스 참조 추가를 통해 생성한다.

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요