2009-06-30 4 views
3

나는 다음을 수행하는 방법을 알아 내려고 노력하고 있어요 : 폼이 제출 된 후ASP 닷넷 MVC 저장 및 재생 후 데이터

1), 원시 포스트 데이터를 직렬화하고 데이터베이스에 저장

2) db에서 게시물 데이터를 읽고 동일한 URL에 다시 게시하여 재생하십시오.

최종 목표에 대해 설명하기 위해 dev, acceptance 및 production이라는 세 가지 주요 env가 있습니다. dev에 변경을 가한 다음 동일한 게시물을 사용하여 변경 사항을 승인으로 승격 할 수 있기를 바랍니다.

아무도 아이디어가 있습니까?

감사합니다, 폴

+0

이러한 환경을 좀 더 자세히 설명해 주시겠습니까? 그것들은 특별히 개발을위한 것이거나 준비 환경 ("수용")이 내용의 편집/승인 단계로 사용 되는가? 이 경우 단일 db를 사용하고 레코드를 공개적으로 볼 것인지 여부를 나타내는 플래그를 플래그에 지정해야합니다. – Soviut

+0

Google 환경에는 별도의 데이터베이스와 도메인 간 사용 권한이 있습니다. 주어진 환경에 게시 될 때 다른 작업 (다른 응용 프로그램을 다시 시작하거나 새로 고침)을 트리거하는 내부 구성 항목을 홍보하는 것을 실제로보고 있습니다. –

+0

나는 비슷한 것을 그리고 있습니다. 샘플이 있습니까? –

답변

4

로깅 목적으로 한 번 비슷한 작업을했습니다. 나는 우리 테스트 그룹에 의해 기록 된 에러를 추적하기 위해 그리고 라이브 어플리케이션에 의해 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"에 상응하는 금액을 적재하고 원하는 모든 조치를 해제 할 수 있습니다 복제하기.

그리고 분명히 원하는만큼 가져갈 수 있습니다. "기록 된"데이터를 사용하여 일부 단위 테스트 등을 수행 할 수 있습니다.

+0

훌륭한 세부 사항에 감사드립니다. 대단히 감사합니다. –

+0

정확하게 앱 문제를 진단하고 수정 사항을 확인하기 위해 수행하고 싶은 작업입니다. 뒤로 돌아가는 기기를 되감고 기록을 재생합니다. 이 게시물은 이제 조금 오래되었습니다 ... 당신은 이것에 도움이 될만한 최근 생각이 있습니까? 감사! –

+0

보안 감사 (누가 언제 어떤 작업을했는지)에 유용합니다. –

1

이 정말 한 환경에서 다른 환경으로 데이터를 이동하는 로터리 방법입니다. 한 환경에서 다른 환경으로 데이터를 이동하려면 XML, JSON 또는 SQL 쿼리 형식으로 조명기를 사용해야합니다. 이 프로세스는 몇 가지 간단한 스크립트를 사용하여 더 자동화 될 수 있습니다.

이 일이 많이 발생하면 적절한 데이터베이스 복제를 조사해야합니다.

관계없이 양식을 사용하는 것은 작업을 수행하는 정말 바보 같은 방식입니다. 백엔드에서 모두 수행하고 데이터베이스를 서로 직접 대화하게하십시오.

+0

저는 그가 다른 환경에서 dev에있는 동일한 게시물을 테스트하고 데이터를 이동하지 않고 사용하려고한다고 말합니다. 내가이 잘못을 읽고있을 지 모르지만. – JoshBerke

+0

그는 왜 프로덕션 환경에서 "테스트"하고 있습니까? 이것이 개발자 및 스테이징 환경을 위해 특별히 설계된 것입니다. 그는 다른 환경으로의 변화를 "촉진"하려고 노력하고 있다고 말했다. – Soviut

+0

나는 그가 충분히 구체적이지 않은 방법으로 질문을 읽을 수 있음을 안다. 그가 실제로 프로덕션 환경에 변경 사항을 적용한다면, 나는 이것을하지 않아야 할 것입니다. – JoshBerke

0

첫 번째 것은 요청을받는 것입니다. 설정 파일을 통해 켜거나 끌 수있는 새로운 http 모듈을 만들어서 할 수 있습니다.

당신이 메시지 (BeginRequest에서 메이비)를 저장하려는 경우 요청 수명주기의 장소를 찾아 다음과 같은 기록 할 것 :

  • Request.InputStream에게
  • URL
  • 사용자 정보는, 당신은 방금 BI를 다시 게시 할 수 있도록하는 방법을 찾기 위해 데이터를 게시 할 준비 할 것입니다 때 플립 측면에서

(사용자 인증을 처리 할 예정 경우) Request.InputStream에서 가져온 네이티브 데이터 내 머리 꼭대기에서 나는 이것에 도움이 될 .net 클래스가 있는지 확실하지 않다. 그러나 웹 클라이언트 중 하나는 요청의 전체 본문을 지정할 수있는 방법을 가질 수 있습니다.

0

이렇게 완전히 자동화 할 수있는 응용 프로그램은 거의 없습니다.

당신은 기록을 지원하는 박스 제품 중 그것을 시도하고 같이 재생할 수 있습니다 :

JMeter를, 셀레늄, 제작 : iOpus 또는 어느 정도의 바이올린에. IOpus가 가장 쉽습니다.

여러분은 곧 이것이 일을하는 데 힘든 방법이라는 것을 알게 될 것이며, 아마도 여러분 자신의 기록/재생 솔루션을 구현하는 데 어려움을 줄 것입니다.