OpenRIA Service 프로젝트 생성

ESOLOGY·2023년 12월 7일
0

OpenRIA

목록 보기
1/1
post-thumbnail

2023.12.07일, VS2019 + VS2022 사용을 기준으로 함.

1. OpenRIA 설치파일 다운로드

https://marketplace.visualstudio.com/items?itemName=OpenRiaServices.OpenRiaServicesTooling

2. Web프로젝트 생성

웹 서버 생성 (Web-ASP.NET Web Application(.NET Framework) -> Empty -> Host in the cloud)

Authentication을 No Authentication을 사용했는데 인증방식은 Forms인증을 사용하므로 web.config에 아래처럼 추가 해 주어야 한다.

<authentication mode="Forms" />

3. WPF 프로젝트와 RIA.Lib프로젝트 생성

실제 WPF어플리케이션이 될 MyProject 와 Web의 DomainService를 받아 자동생성 코드를 만들어줄 RIA.MyProject를 생성

4. WEB.MyProject에 Nuget으로 참조 추가

5. Entity추가 후 DomainService추가

6. RIA.Lib프로젝트와 Web.RIA프로젝트 연결


이렇게 하고 빌드를 하게되면 아래와 같은 오류가 생긴다.

이 문제는 VS2022에서 프로젝트를 열어 리빌드를 해주고 나면 해결이 되고 그 뒤로는 VS2019에서도 잘 동작한다.
※이유는 알 수 없으나 6,7 순서가 뒤바뀌면 위 문제가 해결되지 않는다!
※순서의 영향이 있다고 생각했으나, 프로젝트 빌드가 성공 한 후에도 위와같은 에러가 간헐적으로 발생, 이를 해결하기 위해 다른 프로젝트에서 Mono.Cecil.0.11.5 라이브러리를 받아 프로젝트이 pacakges폴더에 넣어줌으로 해결

7. RIA.Lib, WPF프로젝트에 Nuget으로 참조 추가


※ 라이브러리를 추가하지 않으면 아래 RIA프로젝트와 연결을 해도 자동생성 코드가 만들어지지 않는다.

8. RIA.Lib프로젝트의 Generated_Code폴더 Include


그리고 g.cs파일에서 svc의 이름을 체크해두자

9. WPF프로젝트와 RIA.Lib프로젝트를 연결

10. App.xaml에 DoS설정 추가

using OpenRiaServices.Client;
using OpenRiaServices.Client.Web;
using System;
using System.ServiceModel.Channels;
using System.Windows;

namespace MyProject
{
  public partial class App : Application
  {
    protected override void OnStartup(StartupEventArgs e)
    {
      base.OnStartup(e);
      InitOpenRiaService();
    }
    private static void InitOpenRiaService()
    {

      DomainContext.DomainClientFactory = new CustomWebDomainClientFactory()
      {
        ServerBaseUri = new Uri("https://localhost:44369/" + "WEB-MyProject-Services-MainDoS.svc"),
      };
    }
  }

  [Obsolete]
  public class CustomWebDomainClientFactory : WebDomainClientFactory
  {
    protected override Binding CreateBinding(Uri endpoint, bool requiresSecureEndpoint)
    {
      var binding = base.CreateBinding(endpoint, requiresSecureEndpoint);
      binding.SendTimeout = new TimeSpan(05, 00, 00);
      return binding;
    }
  }
}

11. 동작 확인

    MainDoS dos = new MainDoS();
    var res = await dos.LoadAsync(dos.GetResourceLogsQuery().Take(100));
profile
👩‍💻

0개의 댓글