Silverlight 에서 Socket 통신시 주의사항

– 실버라이트에서 사용가능한 TCP 소켓의 포트 범위도 4502 – 4534으로 한정되어 있음.

 

– 해당포트의 권한을 부여하기 위해서는 웹에서 clientaccesspolicy.xml 사용할때와 유사하게 소켓사용시에도 Policy파일이 필요.

   즉, clientaccesspolicy.xml 을 내려보내주는 Policy서버(포트는 반드시 943)를 만들어주어야 함.

   폴리시 서버의 구축은 구글에서 Silverlight Policy Server로 찾아보면 많이 나오므로 참고 바람.

 

– Policy서버를 만들기 싫다면 구동서버의 기본 웹포트인 80포트에 clientaccesspolicy.xml을 넣어주면 됨

  그리고 Connect시에 ConnectAsync전에 SocketClientAccessPolicyProtocol의 값에 Http를 넣어주면 됨.

   var args = new SocketAsyncEventArgs();
   args.SocketClientAccessPolicyProtocol = SocketClientAccessPolicyProtocol.Http;

   ….
   this.Socket.ConnectAsync(args);

   (enlightened  테스트결과 유사한 8080포트는 안되므로, 반드시 80포트에 넣어야 함)

 

–  clientaccesspolicy.xml 의 내용

 



  
    
      
        
      
      
        
      
    
  

 

dataGridColumn의 이해

dataGridColumn은 그리드를 표현하기 위한 레이아웃으로 아래와 같이 표현된다.








간단히 해당 항목별로 살펴보면 다음과 같다.
– id : 데이터컬럼의 ID이면서 DataField에 해당
– headerText : 데이터 그리드의 헤더에 들어갈 문자열
– width : 데이터컬럼의 Width, Width가 0일 경우 그리드상에서는 hidden으로 된다.
– dataType : 데이터의 형식으로 다음과 같은 형식을 사용할수 있다.
1) string
2) datetime
3) int
4) bool
5) boolyn : yes 또는 no 와 같은 타입

– controlType : 데이터그리드칼럼의 형식으로 다음과 같은 형식을 사용할수 있다.
1) checkbox : 체크박스
2) combo : 콤보박스
3) date : 날자형
4) text : 문자형
5) button : 버튼형
6) imgbutton : 이미지버튼
7) image : 이미지
– controlWidth/controlHeight : button 타입인 경우 그리드 컬럼에 width와 height를 입력하여 적당한 크기로 조절가능하다.
– controlText : button 타입인 버튼의 명칭으로 쓰인다.
– imageUrl: controlType이 imgbutton 또는 image 인경우 이미지의 url을 설정할수 있다.
– format : controlType이 date인 경우 format=’yyyy-MM-dd HH:mm:ss’와 같이 설정할수 있다.
– controlData : controlType이 combo 인 경우 해당 콤보의 데이터들의 집합이다. 데이터형태은 JSON이다.
– controlKey : controlType이 combo 인 경우 JSON 데이터에서 키값이 어떤것인지를 설정하기 위한 필드이다.

[설치] Mosaic SVN 설치하기

1. SVN 다운로드 및 설치

1) SVN Team Provider 설치
i) 이클립스 메뉴의 "Help" => "Eclipse Marketplace"을 선택
ii) 화면 상단의 검색창(Search)에 "Find:"에서 SVN으로 검색.시작
iii) 검색된 내용중, "Subversive-SVN Team Provider"를 설치
K-6

2) SVN Kit 1.7.9 설치
i) 이클립스 메뉴의 "File" -> "Import" 선택
ii) 새로 생성된 "SVN"폴더 선택 -> "Install Connectors" 실행
iii) "SVN Kit 1.7.9"를 선택 후, 설치
K-7


K-13 K-14 K-15
그림(5) SVN Kit 1.7.9 선택 그림 Confirm Selected Features 그림 SVN 설치확인

 

3) 프로젝트 체크아웃
i) 설치된 SVN을 통해 프로젝트 체크아웃을 한다
ii) 프로젝트 url은 아래와 같다.
URL설정 : svn://***.**.***.***/MosaicSVN
아이디 : 생성된아이디 , 비번 ; 생성한 비번

iii) Check Out As 는 2번째 "Find projects in the children of the selected resource"

 

3) Maven User Setting

 Windows=> Prefererns=> Maven=> User Setting

4) Server Xml 수정

 

 

5) Maven 업데이트
i) MosaicWeb 오른쪽 마우스 클릭 => Maven => Update Project

 

6) Mosaic Properties
i) MosaicWeb 오른쪽 마우스 클릭 => Properies

ii) Deplyment Assembly

 

iii) Java Compiler

 

2. 톰캣 7.0 다운로드 및 설치

1) 하기 아파치 웹사이트로 접속하여 "Tomcat 7.0"을 다운로드 한다.

http://www.apache.org/dyn/closer.cgi

 

K-10

 

K-11

 

K-12

 

getRowKeyNoFromIndex

public int getRowKeyNoFromIndex(int intIndex);

인덱스로 부터 현재 RowKeyNo를 구한다.

  • 파라미터

int intIndex 인덱스

  • 리턴값

RowKeyNo

  • 상세설명
  • 예제
mObjDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
var intRowKeyNo = mObjDataGrid.getRowKeyNoFromIndex(1);

exportGrid

public void exportGrid()

– 내용 : 데이터그리드의 데이터를 Excel, CSV, xml 파일로 Export 한다.

– 파라미터 :

– 리턴값 :

– 상세설명 :

Silverlight에서 액셀 파일을 저장하기 위해 쓰는 SaveFileDialog 메소드는 보안상의 이유로 button 클릭시만 사용할수 있다. 따라서 항상

아래와 같은 Confirm메시지박스가 뜨고, Yes또는 OK 또는 확인 시에만 저장가능하도록 되어있다.

 

 

– 예제 :

		function doExport()
		{
			if(mObjDataGrid != null) mObjDataGrid.exportGrid();
		}
						

onColumnUpdated

public event EventHandler onColumnUpdated;

컬럼이 업데이트 되었을때 발생하는 이벤트

  • 상세설명
  • 예제

mObjDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
mObjDataGrid.onColumnUpdated = onCoumnUpdatedHandler;

function onCoumnUpdatedHandler(objSender, objEvent)
{
	alert(objEvent.ColumnId +","+ objEvent.getRowIndex());
}

onSelectionChanged

public event EventHandler onSelectionChanged;

그리드에서 Row 선택이 바뀔때 발생하는 이벤트

  • 상세설명
  • 예제

mObjDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
mObjDataGrid.onSelectionChanged = onSelectionChangedHandler;

function onSelectionChangedHandler(objSender, objEvent)
{
	var intRowKeyNo = objEvent.getRowKeyNo();
	alert(intRowKeyNo);
}

onSavePostCompleted

public event EventHandler onSavePostCompleted;

데이터 저장 전송 완료 이벤트(WCF/Restful 전용)

  • 상세설명
  • 예제
function doSavePost()
{
	var objDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
	if (doDataValidate(objDataGrid))
	{
		objDataGrid.savePost();
		objDataGrid.onSavePostCompleted = onSaveCompletedHandler;
	}
}

function onSaveCompletedHandler(objSender, objEvent)
{
	if (objEvent.ReturnCode == 1)
	{
	    alert("성공적으로 저장되었습니다.");
	}
	else
	{
	    alert("저장에 실패하였습니다.");
	}
}

onDataLoadCompleted

public event EventHandler onDataLoadCompleted;

데이터 수신 완료 이벤트

  • 상세설명
  • 예제
mObjDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
mObjDataGrid.onDataLoadCompleted = onDataLoadCompletedHandler;

function onDataLoadCompletedHandler(objSender, objEvent)
{
	if (objEvent.getReadyState() == 4 && objSender.getRowCount() >= 0)
	{
	}
}

getChangedData

public string getChangedData();

추가/수정/삭제등의 변경이 일어난 데이터를 리턴한다.

  • 파라미터
  • 리턴값
  • 상세설명
  • 예제
mObjDataGrid = document.getElementById("slDataGrid").Content.EntryPoint;
var strData = mObjDataGrid.getChangedData();