로깅 목적으로 한 번 비슷한 작업을했습니다. 나는 우리 테스트 그룹에 의해 기록 된 에러를 추적하기 위해 그리고 라이브 어플리케이션에 의해 GET과 POST 요청을 복제 할 수 있도록 기록했다.
가장 큰 트릭은 웹 응용 프로그램이 대부분 무국적이어야한다는 것입니다. Sessoin을 사용하여 응용 프로그램 주위에 정보를 전달하거나 응용 프로그램에서 ViewState를 전혀 사용하지 않으면 몇 가지 충돌이 발생할 수 있습니다.
웹 사이트를 RESTful으로 만들었 으면 너무 어렵지 않을 것입니다. 그리고 RESTful (http://en.wikipedia.org/wiki/Restful)은 어떤 주어진 RESTful 요청도 서버에 대해 수행 된 이전 요청에 대한 가정을하지 않는다는 사실을 언급한다. 이들은 자체적으로 원 자성을 가지며 수행하려고하는 모든 동작을 수행하는 데 필요한 모든 정보를 포함한다.
1) 나는 모니터하고 싶은 행동에 ActionFilters을 만들어 :
나는 다음을 수행하여이 작업을 수행. 이 ActionFilters는 POST 데이터 캡처를 수행하여 데이터베이스에 저장했습니다. 이 코드는 코드에서 덜 침략적이었고 관심있는 모든 액션에 쉽게 추가/제거 될 수 있었기 때문에 효과적이었습니다.
2) ActionFilter는 본질적으로 요청 유형 (GET vs. POST, HttpContext.Current .Request.HttpMethod를 올바르게 호출 한 경우)와 요청이 제출 한 URL을 비교합니다. POST 인 경우 양식 데이터 (HttpContext.Current.Request.Form)를 JSON으로 직렬화했습니다. 사람이 읽을 수 있기 때문에 JSON을 선택했기 때문에 (이 문제는 나를 위해이 문제를 진단하는 데 중요합니다) FORM 데이터로 작업하기 때문에 평평하고 멋진 JSON 구조로 쉽게 직렬화 할 수 있습니다. 나는 또한 정보 요청을 위해 다른 요청 변수 (HttpContext.Current.Request.Headers)를 모두 기록했다고 생각하지만, 필요에 따라 불필요한 수 있습니다.
System.Web.Script.Serialization.JavaScriptSerializer를 사용하여 양식 데이터를 직렬화했습니다.
이 모든 데이터 (요구 타입, URL, 직렬화 게시물 데이터, 타임 스탬프, 현재 사용자 등)
3) I 특별히보기 위해 설계된 새로운 MVC 컨트롤러를 생성하고 다시 호출하는 데이터베이스에 저장된 요청. 내 경우에는 모니터링 요청을 로깅했기 때문에 LoggingController였습니다. 내 기본보기는 모든 요청 및 대상 URL 목록이었습니다. 내가 뚫고 특정 항목의 "보기"/ "표시"를 수행하면 기록 된 모든 세부 정보가 표시됩니다.
실제로 액션 복제는 JSON 데이터를 deserialize하고 deserialized 데이터가있는 "view"페이지에 채워진 양식 필드 (내 경우에는 숨김)를 구성하여 만들어졌습니다. 그런 다음 GET에는 녹색을, POST에는 빨간색을 추가했습니다. 버튼을 클릭하면 액션이 중복됩니다. GET은 간단합니다. 사용자를 대상 페이지로 보내면됩니다.
그러나 POST의 경우 사용자에게 경고하는 JavaScript를 사용했습니다. "POST 요청을 복제하려고하는데, 이는 호출되는 동작 (삭제, 업데이트 등)에 따라 서버의 데이터를 수정할 수 있습니다. 계속 하시겠습니까? "
예를 클릭하면 JavaScript가 포함 된 양식이 제출되어 POST 작업이되고 Wala는 복제 된 작업이됩니다.
귀하의 경우, 귀하는 귀하의 환경 중 하나로부터 데이터를 로깅 한 다음 해당 데이터를 귀하의 다른 환경 데이터베이스로 복사하여 "LoggingController"에 상응하는 금액을 적재하고 원하는 모든 조치를 해제 할 수 있습니다 복제하기.
그리고 분명히 원하는만큼 가져갈 수 있습니다. "기록 된"데이터를 사용하여 일부 단위 테스트 등을 수행 할 수 있습니다.
이러한 환경을 좀 더 자세히 설명해 주시겠습니까? 그것들은 특별히 개발을위한 것이거나 준비 환경 ("수용")이 내용의 편집/승인 단계로 사용 되는가? 이 경우 단일 db를 사용하고 레코드를 공개적으로 볼 것인지 여부를 나타내는 플래그를 플래그에 지정해야합니다. – Soviut
Google 환경에는 별도의 데이터베이스와 도메인 간 사용 권한이 있습니다. 주어진 환경에 게시 될 때 다른 작업 (다른 응용 프로그램을 다시 시작하거나 새로 고침)을 트리거하는 내부 구성 항목을 홍보하는 것을 실제로보고 있습니다. –
나는 비슷한 것을 그리고 있습니다. 샘플이 있습니까? –