2014-12-02 4 views
0

희망 경로를 얻을 수 있도록 도와주세요. 저는 현재 프로젝트의 디자인 단계에 있습니다. 내 WPF 클라이언트 응용 프로그램에서 사용할 WCF Soap/Rest Web Service가 있습니다. WPF 응용 프로그램이 연결 상태와 연결 끊김 상태 모두에서 작동해야하므로 캐싱을 구현하는 방법에 대한 디자인 문제가 있습니다.생성 때때로 연결이 끊긴 WPF App

ObjectCache를 사용하는 응용 프로그램의 런타임 중에 캐싱을 알고 있지만 응용 프로그램이 닫히고 다시 열릴 경우 사용자가 이미 입력 한 내용을 검색하려고합니다. 마지막 웹 서비스 응답을 가져 와서 양식을 채울 수있는 연결이 끊어 졌습니까? ObjectCaching은 응용 프로그램이 작동하는 동안에 만 가능하므로 클라이언트 응용 프로그램이 웹 서비스 응답 및 사용자 입력/수정 데이터의 모든 데이터를 저장하는 로컬 데이터베이스를 갖는 것이 좋습니다. 이 옵션에 대해 마음에 들지 않는 것은 서버 데이터베이스와 테이블 및 데이터를 복제해야한다는 것입니다.이 테이블과 데이터는 매우 안전하고 보안이 뛰어납니다.

마지막으로 모든 데이터를 어떻게 동기화합니까? 마지막으로 연결할 때 연결이 끊긴 상태에서 WCF 웹 서비스 업데이트 메서드를 호출하고 정보를 다시 서버에 업데이트해야합니다. 이 메시지는 클라이언트에서 실행될 일괄 처리 작업과 함께 어떤 유형의 메시지일까요? 그러면 연결된 모든 데이터를 언제 다시 처리할지 알 수 있습니까? 어떤 생각이라도 좋을 것입니다.

답변

1

찾고있는 것이 매우 쉽고 클라이언트 측 데이터베이스가 필요하지 않습니다. 이런 식으로 구현할지 여부는 실제로 데이터가 얼마나 안전해야하는지에 달려 있습니다.

사용자가 항목을 잃을 위험없이 완전히 종료 된 상태로 클라이언트에서 데이터를 유지하려면 유일한 방법은 클라이언트에 데이터를 저장하는 것입니다. 응용 프로그램이 웹 서버에 액세스하여 변경 사항을 유지할 수없고 응용 프로그램이 닫히거나 충돌하면 변경 내용이 손실되고 사용자는 불만을 느낍니다.

이 작업을 수행하려면 클라이언트 측 필드 요구 사항에 맞는 직렬화 가능 클래스 또는 클래스를 작성하십시오. 클래스는 INotifyPropertyChanged를 구현하여 UI 필드를 바인딩하고 UI 컨트롤 자체가 아니라 모델 객체 내부에서 변경 사항을 유지할 수 있도록해야합니다. 코드 뒤에는 INotifyPropertyChanged도 구현해야합니다. 데이터 객체의 인스턴스를 보유하는 속성이 필요하며 이는 필드를 바인딩하는 것입니다.

사용자가 입력/변경하면 데이터 바인딩에 3 가지 업데이트 옵션이 있습니다. 사용자가 필드를 떠날 때 속성을 업데이트하고 텍스트가 변경 될 때 속성을 업데이트하거나 지정된 지연 시간이 될 때까지 속성 업데이트를 기다립니다. . 이러한 업데이트가 발생하면 PropertyChanged 이벤트가 발생합니다. 이 이벤트에 연결하면 클래스 내부에 메소드를 작성하여 직렬화하고 입력 된대로 데이터를 저장할 수 있습니다. 간단한 XML 또는 JSON 파일이 좋습니다. 또한로드 메소드를 추가하여 데이터 파일을 읽고 역 직렬화 한 후 데이터 오브젝트를 리턴해야합니다. 이렇게하면 응용 프로그램이 예기치 않게 닫히거나 중단되는 경우 Load 메서드를 호출하고로드 된 개체 뒤에 코드의 속성을 설정하면 바인딩이 텍스트를 복원하므로 사용자가 계속 작업을 수행 할 수 있습니다.

모든 정보를 동기화하려면 클라이언트가 서버에 개체를 보내면 변경 내용의 유효성을 검사하고 저장할 수 있습니다. 필자는 구식 데이터를 가진 클라이언트가 새로운 데이터를 덮어 쓰지 못하도록 방지하기 위해 SQL Server를 사용하는 경우 데이터 버전 (TimeStamp 필드)을 추적하기 위해 필드를 사용합니다. 특히 다중 사용자 환경에있는 경우 특히 그렇습니다.

서버에서 WCF 및 Entity Framework를 활용할 수 있으면 매우 강력하고 안정적인 응용 프로그램을 매우 빠르게 작성할 수 있습니다.

보안에 관한 한, 입력되는 데이터의 유형과 그 뒤에 법적 요구 사항 (즉,신용 카드 및 PCI 준수), 개별적으로 해결해야합니다.

+1

위대한 게시물 ... WPF 앱이 INotifyPropertyChanged를 구현 중입니다. WCF 응용 프로그램은 Entity Framework도 사용하고 있으므로 로컬 데이터베이스를 사용하지 않으려 고합니다.이를 그룹으로 가져와 개체를 파일로 serialize하고 나중에 deserialize해야한다고 생각합니다. 어제 MSMQ 사용에 대한 생각은 어땠습니까? –

+0

나는 그것을 사용한 적이 없지만 WCF에 포함되어 있으므로 필요에 따라 적절하게 사용하십시오. – user2920518