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

728x90
반응형

TestProject.zip
다운로드

▶ ITestService.cs

using System.Threading.Tasks;

namespace TestProject
{
    /// <summary>
    /// 테스트 서비스 인터페이스
    /// </summary>
    public interface ITestService
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        #region 페이지 구하기 - GetPage()

        /// <summary>
        /// 페이지 구하기
        /// </summary>
        /// <returns>페이지 태스크</returns>
        Task<string> GetPage();

        #endregion
    }
}

 

▶ TestService.cs

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

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

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        /// <returns>처리 결과 태스크</returns>
        private static async Task<int> Main()
        {
            IHostBuilder builder = new HostBuilder()
                .ConfigureServices
                (
                    (hostContext, services) =>
                    {
                        services.AddHttpClient();

                        services.AddTransient<ITestService, TestService>();
                    }
                )
                .UseConsoleLifetime();

            IHost host = builder.Build();

            using(IServiceScope serviceScope = host.Services.CreateScope())
            {
                IServiceProvider serviceProvider = serviceScope.ServiceProvider;

                try
                {
                    ITestService service = serviceProvider.GetRequiredService<ITestService>();

                    string pageContent = await service.GetPage();

                    Console.WriteLine(pageContent.Substring(0, 500));
                }
                catch(Exception exception)
                {
                    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();

                    logger.LogError(exception, "An error occurred.");
                }
            }

            return 0;
        }

        #endregion
    }
}

 

▶ Program.cs

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace TestProject
{
    /// <summary>
    /// 테스트 서비스
    /// </summary>
    public class TestService : ITestService
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// HTTP 클라이언트 팩토리
        /// </summary>
        private readonly IHttpClientFactory factory;

        #endregion

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

        #region 생성자 - TestService(factory)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="factory">HTTP 클라이언트 팩토리</param>
        public TestService(IHttpClientFactory factory)
        {
            this.factory = factory;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 페이지 구하기 - GetPage()

        /// <summary>
        /// 페이지 구하기
        /// </summary>
        /// <returns>페이지</returns>
        public async Task<string> GetPage()
        {
            HttpRequestMessage requestMessage = new HttpRequestMessage
            (
                HttpMethod.Get,
                "https://www.bbc.co.uk/programmes/b006q2x0"
            );

            HttpClient client = this.factory.CreateClient();

            HttpResponseMessage responseMessage = await client.SendAsync(requestMessage);

            if(responseMessage.IsSuccessStatusCode)
            {
                byte[] byteArray = await responseMessage.Content.ReadAsByteArrayAsync();

                return Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
            }
            else
            {
                return $"상태 코드 : {responseMessage.StatusCode}";
            }
        }

        #endregion
    }
}

 

※ 패키지 설치 : Microsoft.Extensions.Hosting, Microsoft.Extensions.Http

 

1. 비주얼 스튜디오를 실행한다.

2. 비주얼 스튜디오에서 [도구] / [NuGet 패키지 관리자] / [패키지 관리자 콘솔] 메뉴를 클릭한다.

3. [패키지 관리자 콘솔]에서 아래 명령을 실행한다.

Install-Package Microsoft.Extensions.Hosting, Microsoft.Extensions.Http
728x90
반응형
Posted by 사용자 icodebroker

댓글을 달아 주세요