'.NET'에 해당되는 글 21건
- 2009/05/01 Silverlight 서버전송메시지 보안방법
- 2009/03/14 ASP.Net MVC의 무료eBook 공개되었습니다.
- 2009/02/20 Visual Studio추가기능(Add-In) 만들기 - Part3
- 2009/02/14 Visual Studio추가기능(Add-In) 만들기 - Part2
- 2009/02/12 뮤텍스를 사용한 다중실행 방지(C#)
- 2009/02/11 Visual Studio추가기능(Add-In) 만들기 - Part1
- 2008/10/22 한방에 예외로그를 처리하기.
- 2008/09/30 ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得
- 2008/07/26 プログラムによるListの作成例。프로그램을 사용한 SPList작성샘플
- 2008/05/30 [중요] WSS스케줄 리스트의 심각한 버그, WSSスケジュールリストの深刻なバグ [SharePoint] (1)
실버라이트를 사용한 SSL통신 비스므리한 아이디어가 생각나서 적어봅니다..
네고시에이션
1. 세션 생성시에 해당세션에 해당되는 비대칭키를 서버에서 생성해서 세션에 서버의 개인키를 보존
2. 공개키를 클라이언트에 전송(HTML에 집어넣든..Silverlight상에서 수신하든..)
3. 클라이언트는 비대칭키를 생성해서 자신의 공개키를 서버에 전송(서버의 공개키로 암호화해서)
4. 서버는 세션에 클라이언트의 공개키를 보존
5. 클라이언트는 자신의 개인키를 보존. 보존시에는 페이지이동을 고려해야함..
(문제는 클라이언트자신의 개인키를 어디에 보존하느냐??? IsolatedStorage가 사용가능하려나)
암호화 전송시(개인정보,패스워드등)
5. 클라이언트가 서버에 데이터 전송시에 자신의 개인키+서버의 공개키로 암호화해서 전송
6. 서버는 클라이언트에게 서버의 개인키+클라이언트의 공개키로 암호화해서 데이터전송
일반적인 비대칭암호화통신의 방법이지만 먼가뿌듯한 이느낌..-.-;;;
물론 실버라이트랑 서버간의 통신이 대부분 WCF나 Webservice로 이루어지니까
일괄적인 보안설정을 하면되지만.. 보안설정하는것도 꽤 많은 지식과 노력을 요하게되니..
위 기능을 구현한 간단한 컴퍼넌트가 있으면 꽤 좋을듯..
어쨋든 세션당 키가 생성되니 일반적인 웹사이트에서 사용하기에는 충분한 보안레벨인듯..
게다가 javascript연동기능도 만들면 궂이 silverlight로 UI를 만들지 않아도 암호화 가능하다는 사실..
혹시 공개된거 있을려나???
'ASP.Net' 카테고리의 다른 글
| Silverlight 서버전송메시지 보안방법 (0) | 2009/05/01 |
|---|---|
| IE8의 WebSlices기능을 웹사이트에 추가하기 (1) | 2009/03/19 |
| ASP.Net MVC의 무료eBook 공개되었습니다. (0) | 2009/03/14 |
| WebService의 WSDL및 안내페이지 없애기 (0) | 2008/12/09 |
| BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화 (0) | 2008/10/30 |
| ASP.Net와 Java Struts 비교 (0) | 2007/03/19 |
MS의 .Net플랫폼 부사장인 Scott Guthrie씨가 곧 발매예정인 Professional ASP.Net MVC 1.0의 제1장을 집필했는데..
무료로 써주는 대신에 자신의 집필분에 한해 무료공개한다는 전제조건을 달았다고 하네요..
그리하여 제1장이 무료공개 되었는데요..
1장치고는 내용이 충실해서 개발경험있고 MVC에 대한 개념이 잡힌사람한테는
ASP.Net MVC를 처음 접할때에는 굉장히 유용할거 같습니다.
Scott에게 감사드리며 잘읽겠습니다..
근데 누가 번역좀 ??? -.-
원본
http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx
PDF다운로드
http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf
Amazon책정보
http://www.amazon.com/gp/product/0470384611?ie=UTF8&tag=scoblo04-20&linkCode=xm2&camp=1789&creativeASIN=0470384611
'ASP.Net' 카테고리의 다른 글
| Silverlight 서버전송메시지 보안방법 (0) | 2009/05/01 |
|---|---|
| IE8의 WebSlices기능을 웹사이트에 추가하기 (1) | 2009/03/19 |
| ASP.Net MVC의 무료eBook 공개되었습니다. (0) | 2009/03/14 |
| WebService의 WSDL및 안내페이지 없애기 (0) | 2008/12/09 |
| BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화 (0) | 2008/10/30 |
| ASP.Net와 Java Struts 비교 (0) | 2007/03/19 |
의 부연 설명으로 IDTExtensibility2, DTCommandTarget 인터페이스의 간략한 설명으로 추가기능 만들기 내용을 끝내겠습니다.
IDTExtensibility2
| 메서드 | 설명 |
| OnConnection | Visual Studio가 추가기능을 로드할때 불려짐. 커맨드를 추가하거나 초기설정을 할때 사용함. |
| OnDisConnection | Visual Studio가 추가기능을 언로드할때 불려짐. 추가기능에서 추가한 커맨드등을 삭제할때 사용함. |
| OnAddInsUpdate | Visual Studio가 추가기능을 로드할때와 추가기능설정이 변경되었을때 불려짐. |
| OnStartupComplete | Visual Studio가 추가기능의 로딩을 끝냈을때 불려짐. |
| OnBeginShutdown | Visual Studio가 종료될때 불려짐. |
DTCommandTarget
| 메서드 | 설명 |
| Exec | 유저가 커맨드를 실행했을때 불려짐. 커맨드의 실제 실행로직에 사용하면 됨. |
| QueryStatus | Visual Studio의 상태가 변경되었을때 불려짐. 상황에 따라서 커맨드의 활성비활성화를 결정지을때 사용하면 됨. |
마지막으로...추가기능을 배포에 관한 내용입니다.
기본적인 배포방법은 Add-In을 VS에서 사용하려면 애드인 정의XML을
My Documents\Visual Studio 2005\Addins 또는 My Documents\Visual Studio 2008\Addins에 복사해 넣고
(모든 PC사용자에게 사용가능하게 하려면 Documents and Settings\All Users\My Documents 에 넣으시면 됩니다.)
정의XML에 기입된 DLL의 장소(파일, url, GAC)에 DLL을 집어넣는것으로 배포는 끝입니다.
정말 간단한 방법에 MS에 감사드립니다..-.-
정의 XML과 배포에 대한 보다 자세한 내용은 아래의 링크로 대신하겠습니다.
http://msdn.microsoft.com/ko-kr/library/19dax6cz(VS.80).aspx -> 추가기능 등록
http://msdn.microsoft.com/ko-kr/library/keet1583(VS.80).aspx -> 기타 참고 제어 방법
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
에 이어서 VS에 간단한 추가기능을 추가해보도록 하겠습니다.
제일중요한 IDTExtensibility2와 IDTCommandTarget의 인터페이스에 대한 정리는 제일 나중에 정리하도록 하고..
일단 툴바메뉴에 버튼을 추가해보죠.
IDTExtensibility2의 인터페이스메서드중 하나인 OnConnection메서드에 아래와같은 코드를 입력해주시고
SetToolBar()라는 함수도 추가해주세요. SetToolBar는 실제 버튼을 등록하는 코드를 서브루틴으로 빼둔겁니다.
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
switch (connectMode)
{
case ext_ConnectMode.ext_cm_Startup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_AfterStartup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_CommandLine:
break;
case ext_ConnectMode.ext_cm_External:
break;
case ext_ConnectMode.ext_cm_Solution:
break;
case ext_ConnectMode.ext_cm_UISetup:
break;
default:
break;
}
}
/// <summary>
/// 표준Toolbar에 버튼을 등록
/// </summary>
private void SetToolBar()
{
CommandBar stdCmdBar;
CommandBarButton cmdBarBtn;
object[] contextGUIDS = new object[] { };
//커맨드가 등록되어 있지않다면 새로 등록
if (ToolbarCommand == null)
{
ToolbarCommand = _applicationObject.Commands.AddNamedCommand(_addInInstance,
"ANewComment", "코멘트추가", "코멘트를 추가해줍니다.", true, 59, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported
| (int)vsCommandStatus.vsCommandStatusEnabled);
}
//표준툴바의 객체를 취득
stdCmdBar =
(Microsoft.VisualStudio.CommandBars.CommandBar)((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["Standard"];
//표준툴바에 버튼을 추가
stdCmdBarCtl = (Microsoft.VisualStudio.CommandBars.CommandBarControl)ToolbarCommand.AddControl(stdCmdBar, stdCmdBar.Controls.Count + 1);
//버튼에 캡션설정
stdCmdBarCtl.Caption = "이거 누르면 코멘트가 추가됩니다.";
//버튼을 아이콘으로 설정
cmdBarBtn = (CommandBarButton)stdCmdBarCtl;
cmdBarBtn.Style = MsoButtonStyle.msoButtonIcon;
}
일단 이것만 하고 실행(F5)를 누르고 디버깅해주시면 아래 그림과 같이 툴바 제일끝에 스마일버튼이 추가된걸 보실수가 있습니다.
근데!!버튼을 누를수가 없네요.
IDTCommandTarget의 인터페이스메서드중 하나인 QueryStatus메서드에 아래와같은 코드를 입력해주세요.
빨간 부분은 프로젝트를 만들때 사용했던 추가기능의 이름을 넣어주세요.
public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText)
{
if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
//커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄
if (commandName == "MyTestAddin1.Connect.ANewComment" && _applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
status = (vsCommandStatus) vsCommandStatus.vsCommandStatusEnabled | vsCommandStatus.vsCommandStatusSupported;
return;
}
}
}
QueryStatus메서드는 VS가 자신의 상태가 변하면 각 커맨드들에 사용가능한 상태인지 요청하게 됩니다.
QueryStatus메서드에서 현재 VS의 상황을 파악하여 사용가능여부를 반환합니다.
예를들어 위의 코드에서는 '커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄'이 상황이 됩니다.
제가 현재 열려진 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄이란 조건을 설정한 이유는 스타트페이지가 열려진 상태에서 버튼이 눌러지게 되면 코멘트를 넣을곳이 없기때문에 에러를 발생시키기 때문이죠..
물론 코멘트를 넣어줄때 체크를 하면되지만 유저인터페이스를 고려해서 쓸수 없는 상황에는 아예 안눌려지게 하기위함입니다..
(위의 조건도 완벽한 상태가 아닙니다.실은 vsWindowTypeDocument라는건 파일의 종류와 상관없이 편집가능한 문서-소스코드,HTML,CSS,XML등 모든 문서-를 의미합니다.)
자 이제 마지막으로 버튼을 눌렀을때 문서에 코멘트를 넣는 코드를 추가해보겠습니다.
IDTCommandTarget의 인터페이스메서드중 하나인 Exec메서드에 아래와같은 코드를 입력해주세요.
{
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
switch (commandName) //스위치를 사용하여 불려진 커맨드를 체크.(혹시 하나의 추가기능에 버튼이 여러개 있을수도 있으니까 스위치를 사용합니다.)
{
case "MyTestAddin1.Connect.ANewComment":
//현재 열려진 창이 문서인지 재확인을 하고
if (_applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
//열려진 문서의 인스턴스를 취득해서
TextDocument textDoc = (TextDocument) _applicationObject.ActiveWindow.Document.Object("TextDocument");
textDoc.StartPoint.CreateEditPoint(); //커서위치를 가져오고
//커맨드를 삽입하고
textDoc.Selection.Insert(string.Format("//{0}에 입력되었습니다.",DateTime.Now.ToString()), 0);
//보기좋게 하기위해 개행문자를 넣어줌...
textDoc.Selection.EndOfLine(true);
textDoc.Selection.NewLine(1);
handled = true;
}
return;
default:
break;
}
}
}
자!!! 이제 다 만들어졌습니다.
다시 실행버튼을 누르시고 대충 아무 cs파일을 여시고.. 파일을 여시면 버튼이 활성화되는걸 보실수 있을겁니다.
그리고 버튼을 누르시면 아래처럼 자동으로 코멘트가 들어가 있을겁니다.
일단 오늘 시간이 좀 늦었으니 담번에 IDTExtensibility2와 IDTCommandTarget에 대해서랑 어떻게 추가기능을 배포할것인지를 정리하도록 하겠습니다..-.-;;
내용 추가
아래 소스코드도 IDTExtensibility2의 OnDisconnection메서드에 집어넣어주세요. 아래의 소스코드는 추가기능이 언로드될때 커맨드와 버튼을 삭제해줄때 사용합니다.이걸 집어넣지 않으면 추가기능을 활성화, 비활성화할때 에러를 발생시킬수 있거든요..^^;
깜박하고 빼먹었습니다..
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
{
//추가기능이 언로드될 등록한 버튼과 커맨드를 삭제
try
{
if (disconnectMode == ext_DisconnectMode.ext_dm_UserClosed)
{
if (stdCmdBarCtl != null)
{
stdCmdBarCtl.Delete(null);
stdCmdBarCtl = null;
ToolbarCommand.Delete();
ToolbarCommand = null;
}
if (MenuToolCommand != null)
{
MenuToolCommand.Delete();
MenuToolCommand = null;
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
많이 쓰이는건데..
WinApp의 다중실행을 방지하는 샘플입니다.
Program.cs를 아래와 같이 변경해주세요.
static class Program
{
// 어플리케이션의 이름
private static string strAppConstName = "적당한 어플리케이션의 이름";
// 다중기동을 방지하는 뮤텍스인스턴스
private static Mutex mutexObject;
[STAThread]
static void Main()
{
// Windows 2000(NT 5.0)이후만 글로벌 뮤텍스가 사용가능
OperatingSystem os = Environment.OSVersion;
if ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 5))
{
strAppConstName = @"Global\" + strAppConstName;
}
try
{
// 뮤텍스를 생성
mutexObject = new Mutex(false, strAppConstName);
}
catch (ApplicationException e)
{
// 글로벌 뮤텍스에 의한 다중실행 방지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
return;
}
// 뮤텍스를 취득
if (mutexObject.WaitOne(3000, false))
{
//실행
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frm_SignIn());
//프로그램사용이 끝났으니 뮤텍스를 해방
mutexObject.ReleaseMutex();
}
else
{
//이미 실행중이니 경고 메시지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
}
// 뮤텍스를 파기하고 완전종료
mutexObject.Close();
}
}
'.Net' 카테고리의 다른 글
| 뮤텍스를 사용한 다중실행 방지(C#) (0) | 2009/02/12 |
|---|---|
| 六曜を取得する (0) | 2008/10/25 |
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
| 진정한 웹다중Tier개발의 시작? VOLTA플랫폼 (0) | 2007/12/10 |
Visual Studio에는 3가지 방법으로 개발환경을 커스터마이징할수 있습니다.
매크로
매크로는 흔히 이용하는 오피스의 매크로와 동일하다고 보시면 됩니다.
사용자의 액션을 레코딩하여 반복작업을 간단하게 해줄수도 있고 컴파일이 필요없기 때문에 쉽게 편집할수도 있습니다.
다만 Visual Basic으로만 저장이 가능하고 소스코드가 그대로 저장되어서 배포할때도 소스코드가 배포되니
통합된 프로젝트에서는 관리하기가 불편하죠.
Add-In
하나의 어플리케이션형태로 개발되고 배포또한 인스톨러형식으로 배포가능하고 매크로보다 강력합니다.
매크로는 사용자의 명령을 소스코드가 대신해주는 기능뿐이지만 Add-In은 하나의 어플리케이션처럼
VS랑 상호작용하니 가능한 작업도 많아집니다.
Visual Studio SDK
이건 저도 사용해본적이 없어서 많은 설명을 드릴수는 없지만 Visual Studio SDK를 사용하면
VS를 근본부터 제어할수 있습니다. DevParter라든지 각종 서드파티의 개발지원툴들은 이것을 이용하여 개발되었다고
보시면 됩니다.WF나 WCF의 디자이너또한 마찬가지이고요..
3파트 정도로 나뉘어서 간단하게 툴바에 버튼을 하나 추가하여 버튼을 누르면 소스코드에 코멘트를
자동으로 입력해주는 기능을 만들어보도록 하겠습니다.
일단 오늘은 VS가 제공하는 템플릿을 사용하여 기본틀만 만들어보죠.
1. 새 프로젝트를 클릭하셔서 "기타 프로젝트형식" -> "확장성" -> "Visual Studio 추가기능" 순으로 클릭해주세요.
그리고 적당한 이름을 넣으시고 "확인을 눌러주세요.
참고로 옆에 보이는 "공유추가기능"이란건 오피스등에서 사용할수 있는 추가기능을 말합니다.
2. 그럼 위저드가 실행되어 언어를 선택하는 화면이 나옵니다.여기서는 C#을 선택합니다.
3. 그후에는 어떤 형식으로 추가기능을 사용할건지가 나오는데요. Macros를 제외한걸 선택합니다.
(실은 Macros를 선택한것과 안한것이 머가 틀린지는 저도 모르겠습니다...-.-..다만 추가기능의 정의XML에 호스팅되는 환경으로 매크로가 추가될뿐...)
4.그리고 이름과 설명을 대충입력해주시고요...
5. 아래와 같이 체크복스를 체크합니다.
가볍게 설명을 하자면 "도구"메뉴항목을 만듭니다..라는 내용은 VS상단메뉴의 "도구"에 지금 만드는 추가기능의
기본명령을 추가해주는 소스코드를 자동으로 만들어줍니다.
다음으로 호스트 응용프로그램이 시작될때 로드합니다.라는 내용은 추가기능의 정의XML에 옵션설정을 해주어서
별도의 유저액션없이 추가기능을 로드해줍니다.
마지막의 모달UI를 표시하지 않으며...라는 내용은 MSDN에는 추가 기능에 모달 UI(사용자 인터페이스)를 사용하지 않도록 하여 명령줄 빌드에서 안전하게 사용할 수 있도록 할지 여부라고 나오는데 당췌 먼말인지 모르겠습니다..-.-
6. 상단 메뉴의 "도움말" -> "Visual Studio 정보"라는 메뉴를 클릭했을때 나오는 일반적은 정보화면에 추가기능의 정보를 표시할지를 선택합니다. 대충 입력하시고 다음을 눌러주세요..
7. 그럼 프로젝트가 작성되어지고 다음의 소스코드들이 들어가 있을겁니다.
이걸로 템플릿을 사용하여 아무것도 없는 소스코드까지만 만들었습니다.
하지만 다음 내용을 위해 하나 해둬야 할게 있습니다.
현재 Connect는 IDTExtensibility2라는 인터페이스만을 구현하고 있는데 이건 추가기능으로써 필요한 인터페이스입니다.
저희는 도구모음을 버튼을 추가해야하니 IDTCommandTarget라는 인터페이스도 구현해야합니다.
IDTCommandTarget라는 텍스트를 추가하시고 아래그림과 같이 메서드스터브를 자동으로 만들어 주세요.
IDTExtensibility2과 IDTCommandTarget에 대한 설명을 다음 내용에서 설명하도록 하겠습니다.
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
개발자가 많아지거나 규모가 커지면 커질수록 예외처리를 하기가 쉽지않은데요..
아래의 코드를 이용해서 처리가 안된 예외를 자동으로 캐치해서 로그를 남겨줄수있습니다.
이렇게하면 알수없는 에러가 발생했을경우 로그가 남기때문에 수정하기가 쉬워지죠...
{
//여기서 예외가 발생안하면 웹어플리케이션
//ここで例外が発生しなかったらウェブアプリケーション
System.Web.HttpContext.Current.ApplicationInstance.Error += new EventHandler(ApplicationInstance_Error);
}
catch (Exception)
{
//윈도우 어플리케이션의 UnhandledException이벤트에 핸들러를 추가
//例外が発生したらウィンドウアプリケーション
System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
static void ApplicationInstance_Error(object sender, EventArgs e)
{
//로그를 남기는 처리를 집어넣기
//WriteLog("Exception発生!!!",System.Web.HttpContext.Current.Error.ToString(), LogLevel.Fatal);
}
{
//로그를 남기는 처리를 집어넣기
//WriteLog("Exception発生!!!", e.ExceptionObject.ToString(), LogLevel.Fatal);
}
위의 코드로 처리되지않은 에러들이 각각 ApplicationInstance_Error와 CurrentDomain_UnhandledException 이벤트핸들러로 넘어오게됩니다.
그럼 필요한 코드를 집어넣어서 파일 또는 이벤트로그에 로그를 남기시면 에러가 발생했을경우 유저를 붙잡고 어떤 에러가 낳는지 캐물을 필요도 없게됩니다...ㅎ
저는 위의 코드를 별도로 개발한 범용로그컴퍼넌트에 붙여넣어서 Logger가 로딩되면 자동으로 어플리케이션에 붙히도록 해두었습니다.
'.Net' 카테고리의 다른 글
| 뮤텍스를 사용한 다중실행 방지(C#) (0) | 2009/02/12 |
|---|---|
| 六曜を取得する (0) | 2008/10/25 |
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
| 진정한 웹다중Tier개발의 시작? VOLTA플랫폼 (0) | 2007/12/10 |
'.Net' 카테고리의 다른 글
| 六曜を取得する (0) | 2008/10/25 |
|---|---|
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
| 진정한 웹다중Tier개발의 시작? VOLTA플랫폼 (0) | 2007/12/10 |
| MS,.Net의 소스코드 공개 (0) | 2007/10/06 |
プログラムによるListの作成例。프로그램을 사용한 SPList작성샘플

SPWeb myweb = SPControl.GetContextWeb(Context);
myweb.AllowUnsafeUpdates = true;
Guid listid = myweb.Lists.Add("SomeList", "", SPListTemplateType.GenericList); //静的な名前で登録。정적인 이름으로 일단 등록
myweb.Update(); //まずWebに登録処理を行わないと修正ができない。SPWeb을 업데이트안하면 수정이 안됨.
myweb.AllowUnsafeUpdates = true;
SPList targetlist = web.Lists[listid];
targetlist.Title = "実際の名前"; //画面に表示される名前を設定 화면에 표시될 이름을 설정
targetlist.OnQuickLaunch = true; //サイドリンクバーに表示
targetlist.Fields.Add("SomeFieldName", SPFieldType.Choice, false); //フィールドを1つ追加
SPFieldChoice fld_historytype = new SPFieldChoice(targetlist.Fields, CONSTActionHistory.ActionType);
fld_historytype.Title = "タイプ";
fld_historytype.Choices.Add("A");
fld_historytype.Choices.Add("B");
fld_historytype.Choices.Add("C");
fld_historytype.EditFormat = SPChoiceFormatType.Dropdown;
fld_historytype.Update();
targetlist.Update(); //SPListの更新
'SharePoint Services/WSS 3.0' 카테고리의 다른 글
| WSS SP2가 나왔네요.. (3) | 2009/05/11 |
|---|---|
| プログラムによるListの作成例。프로그램을 사용한 SPList작성샘플 (0) | 2008/07/26 |
| Aspxファイルでコードを実行するには. Aspx파일에서 프로그램코드 실행하기 (0) | 2008/07/01 |
| LookUpField의 쿼리문. LookUpFieldのクエリ文 (0) | 2008/05/30 |
| 페이지당검색결과수를 조절하기. 1ページあたりの検索結果数を変える [SharePoint] (0) | 2008/05/30 |
| [중요] WSS스케줄 리스트의 심각한 버그, WSSスケジュールリストの深刻なバグ [SharePoint] (1) | 2008/05/30 |
[중요] WSS스케줄 리스트의 심각한 버그, WSSスケジュールリストの深刻なバグ [SharePoint]

심지어 이문제는 얼마전 릴리스된 WSS3.1에서도 해결이 안되었습니다.
한달에 999개 이상의 아이템이 등록된경우 1000번째 아이템부터 아예 표시가 안된다는 겁니다.
오늘 이문제에 대해서 상세히 조사를 해보았습니다만...해결책은 아직 아무도 못찾은거 같더군요.
조사한것에 대해서 보고를 하죠...
일단 아래 그림을 봐주시죠.
5월 1일 부터 시작하는 정기적인(1일단위) 스케줄을 38개를 등록해봤습니다.
5월 26일까지는 정상적으로 표시 5월 27일부터 반쯤 끊긴 상태로 아예표시가 되지 않습니다.
다음그림은 6월달의 스케줄입니다. 이것이 재미있는데...
6월19일까지만 정상적으로 나오고 6월 20일부터는 아예 표시가 안됩니다.
왜 5월은 999개가 나오고 6월은 999가 안될까요? 이유는 데이터를 뽑아올때 선택된 달의 1주일전의 데이터부터 가져와서 입니다..보통 1달치 달력에는 1일이 수요일이면 29 30 1 2 3 4 5 순으로 표시되기때문이죠..
때문에 6월치 데이터를 불러올때는 5월 24일부터의 데이터를 가져오게됩니다.그래서 아래 화면에서 실제 표시되는 데이터수가 999가 안되는거죠...이건 프로그래밍방식으로 데이터를 취득해보시면 확인해볼수 있습니다.
정확하진 않지만 원인은 Recurrece 즉 반복적인 아이템을 처리하는 방식에 기인하는거 같습니다.
일반적으로 아이템은 1개=1줄의 물리데이터로 이루어졌습니다.
정기적인 아이템역시 똑같이 1줄의 데이터로 들어가있고...DB에서 SPListItem으로 변환되는 어느시점에서 여러개의 메모리아이템으로 전환합니다.
그때 Sharepoint기본의 Maxrow 1000의 적용이 되어버리는것 같습니다. (근데 왜? 999개만 나오지??)
일단 제가 알아낸 바로는 위와 같습니다. 혹시나 ContentDatabase의 스토어드 프로시져를 확인해보기도 했지만 역시 해결이 안되더군요...
실은 이문제를 몇달전에 확인해서 정상적으로 모든 아이템이 표시되도록 스케줄 화면을 전체적으로 뜯어고친적이있습니다. 그후로 별 문제가 없구나...하고 생각했었는데
오늘 클라이언트에게서 연락이와서 스케줄을 클릭하면 에러가 난다고 해서 다시 조사를 해봤습니다.
그랬더니!!! 리스트상에 표시되지 않는 아이템을 상세화면에서 볼때도 에러가 발생하더군요..
일반스케줄은 문제가 없는데 정기적인 스케줄의 경우에만 에러가 생기더군요...
도대체!!!! 멍청하게도 MS는 이런걸 확인도 안하고 릴리스를 하는지....
게다가 왜 패치는 안나오는지....ㅠ.ㅠ.
어여좀 고쳐주시길!!!!!!!!
------------------------------------------------------------------------------------------
ご存じの方多いと思いますがWSSのスケジュールリストには深刻なバグがあります。
この問題はこの間リリースされたWSS3.1でも解決がされていません。
問題とは1か月に999件以上のアイテムが登録された場合、1000件から表示がされないという問題です。
今日この問題に関して調べてみましたがまだだれも解決してないようです。
まず私が確認した内容を説明します。
下の図をみてください。
5月1日から始まる定期的(1日単位)のスケジュールを38件登録しました。
5月26日までは正常に表示されますが5月27日からは正常に出てきてくれません。
次の図は6月のスケジュールです。6月20日からは正常に表示されません。これが面白いです。
なぜ5月は999件が表示されるけど6月は足りないでしょうか。理由はデータを取得する際、選択した月の初日-7日のデータから取ってきてくるからです。普通1か月分のカレンダーには先月、来月が少しずつ含まれるからでしょう。
そんなわけで5月24日から取ってきているはずです。試しにプログラミング方式でデータを取得してみるとわかります。
当たりかどうかわかりませんが、原因は Recurrece、すなわち反復型のアイテム処理方式に問題がある気がします。
WSSではアイテム1件=1行の物理データになってます。
定期的なアイテムも同様で、どっかのタイミングでDBの1行のデータを複数のSPListItemに変換しています。
その時にWSS基本のMax行数1000件が適応されてしまうようで、Queryで行制限を増やしもききません。
とりあえず私が確認した内容は以上です。
もしかしても思ってコンテンツデータベースのどっかに設定があるのかなと思って探してみても見当たりませんでしが。
MSはアホみたいにこんなこともテストせずにリリースするんでしょうかね。。。
パッチも出さないし。。。
早く直してくれ!!!!!!!!!!!!
'SharePoint Services/WSS 3.0' 카테고리의 다른 글
| LookUpField의 쿼리문. LookUpFieldのクエリ文 (0) | 2008/05/30 |
|---|---|
| 페이지당검색결과수를 조절하기. 1ページあたりの検索結果数を変える [SharePoint] (0) | 2008/05/30 |
| [중요] WSS스케줄 리스트의 심각한 버그, WSSスケジュールリストの深刻なバグ [SharePoint] (1) | 2008/05/30 |
| 워크플로 시작을 간단하게 (ワークフローの開始を楽ちんに) [SharePoint] (0) | 2008/05/26 |
| EventReceiverのでItemUpdated自分自身を更新してはいけない?[SharePoint] (0) | 2008/05/21 |
| VS Extensions 1.1인스톨후에 1.0에서 작성한 프로젝트를 인식못하는 문제..Vs Extensions 1.1のインストール後、1.0で作成したプロジェクトを認識できない。 (0) | 2008/04/01 |
![]() |
![]() |
|
![]() |
![]() |
![]() |

Prev





Rss Feed