다음을 통해 공유


Windows(UWP) 앱에 오프라인 데이터 동기화 추가

메모

이 제품은 사용 중지되었습니다. .NET 8 이상을 사용하는 프로젝트를 대체하려면 Community Toolkit Datasync 라이브러리참조하세요.

이 자습서에서는 UWP 빠른 시작 앱용 Azure Mobile Apps의 오프라인 동기화 기능을 설명합니다. 오프라인 동기화를 사용하면 최종 사용자가 네트워크 연결이 없는 경우에도 모바일 앱(데이터 보기, 추가 또는 수정)과 상호 작용할 수 있습니다. 변경 내용은 로컬 데이터베이스에 저장됩니다. 디바이스가 다시 온라인 상태가 되면 이러한 변경 내용이 원격 백 엔드와 동기화됩니다.

이 자습서를 시작하기 전에 적절한 백 엔드 서비스 만들기를 포함하는 UWP 빠른 시작 자습서완료해야 합니다. 또한 애플리케이션에 인증 추가된 것으로 가정합니다. 인증 없이 앱에 오프라인 기능을 추가할 수 있습니다.

오프라인 동기화를 지원하도록 앱 업데이트

온라인 작업에서는 IRemoteTable<T>읽고 씁니다. 오프라인 동기화를 사용하는 경우 대신 IOfflineTable<T> 읽고 씁니다. IOfflineTable<T> 디바이스 SQLite 데이터베이스에서 지원되고 백 엔드 데이터베이스와 동기화됩니다.

필요한 NuGet 패키지 추가

Visual Studio에서:

  1. TodoApp 솔루션을 마우스 오른쪽 단추로 클릭한 다음 솔루션용 NuGet 패키지 관리...선택합니다.

  2. 새 탭에서찾아보기 선택한 다음 검색 상자에 microsoft.Datasync.Client 입력합니다.

    Visual Studio에서 오프라인 NuGet을 추가하는 스크린샷

  3. Microsoft.Datasync.Client.SQLiteStore 패키지를 선택합니다.

  4. 오른쪽 창에서 TodoAppService.NET6 프로젝트를 제외한 모든 클라이언트 프로젝트를 선택합니다.

  5. 설치선택합니다.

  6. 메시지가 표시되면 사용권 계약에 동의합니다.

원격 서비스 클라이언트 업데이트

TodoApp.Data 프로젝트를 열고 Services 디렉터리 내에서 RemoteTodoService.cs 클래스를 찾습니다. 다음과 같이 클래스를 업데이트합니다.

  1. 파일 맨 위에 다음 using 문을 추가합니다.

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. _table 정의를 IOfflineTable<TodoItem>변경합니다.

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. 오프라인 데이터베이스 위치를 저장하기 위한 새 속성을 추가합니다.

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. 오프라인 데이터베이스를 정의하도록 InitializeAsync 메서드를 업데이트합니다.

    // Create the offline store definition
    var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString();
    var store = new OfflineSQLiteStore(connectionString);
    store.DefineTable<TodoItem>();
    var options = new DatasyncClientOptions
    {
        OfflineStore = store,
        HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() }
    };
    
    // Create the datasync client.
    _client = TokenRequestor == null 
        ? new DatasyncClient(Constants.ServiceUri, options)
        : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options);
    
    // Initialize the database
    await _client.InitializeOfflineStoreAsync();
    
    // Get a reference to the offline table.
    _table = _client.GetOfflineTable<TodoItem>();
    
    // Set _initialized to true to prevent duplication of locking.
    _initialized = true;
    
  5. 오프라인 동기화를 수행하도록 RefreshItemsAsync() 업데이트합니다.

    /// <summary>
    /// Refreshes the TodoItems list manually.
    /// </summary>
    /// <returns>A task that completes when the refresh is done.</returns>
    public async Task RefreshItemsAsync()
    {
        await InitializeAsync();
    
        // First, push all the items in the table.
        await _table.PushItemsAsync();
    
        // Then, pull all the items in the table.
        await _table.PullItemsAsync();
    
        return;
    }
    

오프라인 데이터베이스 위치 설정

TodoApp.UWP 프로젝트에서 App.xaml.cs 파일을 편집합니다. 다음과 같이 RemoteTodoService 정의를 변경합니다.

TodoService = new RemoteTodoService(GetAuthenticationToken)
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

인증 자습서를 완료하지 않은 경우 정의는 다음과 같이 표시됩니다.

TodoService = new RemoteTodoService()
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

ApplicationData 인식되지 않는 경우 파일 맨 위에 다음을 추가해야 할 수 있습니다.

using Windows.Storage;

메모

유니버설 Windows 플랫폼은 데이터를 읽고 쓸 수 있는 위치를 제한합니다. ApplicationData.Current스토리지 폴더를 사용할 수 있습니다. 데이터를 사용할 수 있지만 클라우드에 백업하지 않으려면 LocalCacheFolder사용합니다.

앱 테스트

앱은 새로 고침 아이콘을 누를 때까지 백 엔드와 동기화되지 않습니다. 테스트하려면 다음을 수행합니다.

  1. Azure Portal엽니다.

  2. 빠른 시작에 대한 리소스가 포함된 리소스 그룹을 엽니다.

  3. quickstart 데이터베이스를 선택합니다.

  4. 쿼리 편집기(미리 보기)선택합니다.

  5. 데이터베이스에 대해 설정한 것과 동일한 자격 증명을 사용하여 SQL Server 인증으로 로그인합니다.

    • 필요한 경우 IP 주소에 대한 액세스를 허용하라는 메시지가 표시됩니다. 링크를 선택하여 허용 목록을 업데이트한 다음 확인 눌러 로그인을 다시 시도합니다.
  6. 쿼리 편집기에서 SELECT * FROM [dbo].[TodoItems]입력합니다. 그런 다음 실행을 선택합니다.

현재 TodoItems 목록이 표시됩니다.

S QL 쿼리 편집기의 결과 스크린샷

이제 앱을 통해 몇 가지 사항을 변경합니다. 새로 고침 누르지 마세요(아직).

Azure Portal에서 SQL 문을 반복하고 데이터베이스의 데이터가 변경되지 않은지 확인합니다.

앱에서 새로 고침 아이콘을 선택하여 큐에 있는 데이터를 백 엔드 서비스로 푸시합니다. 출력 디버그 창에서 HTTP 트랜잭션이 발생하는 것을 볼 수 있습니다.

Azure Portal에서 SQL 문을 반복하고 변경 내용이 원격 서비스에 푸시되었는지 확인합니다.

리소스 정리

다른 빠른 시작 자습서를 수행하지 않는 한 지금 백 엔드 서비스와 연결된 리소스를 삭제할 수 있습니다.

  1. Azure Portal엽니다.
  2. 빠른 시작 리소스를 보유하는 리소스 그룹을 선택합니다.
  3. 리소스 그룹삭제를 선택합니다.
  4. 지침에 따라 삭제를 확인합니다.

Azure CLI를 사용할 수도 있습니다.

az group delete -g quickstart

Azure Developer CLI를 사용하여 리소스를 배포한 경우 대신 azd down 명령을 사용할 수 있습니다.

삭제를 완료하는 데 몇 분 정도 걸립니다.

다음 단계