'C#'에 해당되는 글 41건
- 2011/11/04 volatile(C# 참조)
- 2011/07/07 Hooking on C#
- 2011/04/14 C# SMTP Send use GMAIL
- 2011/03/29 C# - Diroctory Copy (Recursive method)
- 2011/03/27 Q&A - Send a None exist email with SmtpClient(C#)
- 2011/02/25 C# 'this' keyword - Extension Method
- 2010/04/15 ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization
- 2009/05/14 C# : Unit Class - File Size
- 2009/04/20 C# : TextBox Auto Scrolling (2)
- 2009/04/14 Better string.IsNullOrEmpty() ? How to do C#.NET 3.0
SingleTone Pattern을 적용하기 위해 volatile이란 키워드가 있는걸 알게 되었습니다.
목적에 맞는 코딩이 중요하니깐 꼭 알아둬야겠네요..
volatile(C# 참조)
일반적으로 volatile 한정자는 액세스를 serialize할 때 lock 문(C# 참조) 문을 사용하지 않고 여러 스레드에서 액세스하는 필드에 사용됩니다. 다중 스레드 시나리오에서 volatile을 사용하는 방법의 예제는 방법: 스레드 만들기 및 종료(C# 프로그래밍 가이드)를 참조하십시오.
volatile 키워드는 다음과 같은 형식의 필드에 적용할 수 있습니다.
-
참조 형식
-
안전하지 않은 컨텍스트의 포인터 형식 포인터 자체는 volatile일 수 있는 반면 포인터가 가리키는 개체는 volatile일 수 없습니다. 즉, "volatile 개체에 대한 포인터"를 선언할 수 없습니다.
-
sbyte, byte, short, ushort, int, uint, char, float 및 bool 같은 정수 계열 형식
-
정수 계열 형식을 기반으로 한 열거형
-
참조 형식으로 알려진 제네릭 형식 매개 변수
volatile 키워드는 클래스 또는 구조체의 필드에만 적용할 수 있습니다. 로컬 변수는 volatile로 선언할 수 없습니다.
'.NET > C#' 카테고리의 다른 글
| volatile(C# 참조) (0) | 2011/11/04 |
|---|---|
| Win32 to .NET Framework API MAP (0) | 2011/09/08 |
| Visual Studio - Windows Service Build Event (0) | 2011/08/17 |
| Hooking on C# (0) | 2011/07/07 |
| C# SMTP Send use GMAIL (0) | 2011/04/14 |
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
C#에서 Global hooking은 .NET Framework 차원에서 지원하지 않는다고 합니다.
그러나, WH_KEYBOARD_LL 과 WH_MOUSE_LL hooking의 global hook이 가능하다고 하네요.
참고할만한 사이트..
ex) 1. How to set a Windows hook in Visual C# .NET
2. Processing Global Mouse and Keyboard Hooks in C#
3. Using Hooks from C#
'.NET > C#' 카테고리의 다른 글
| Win32 to .NET Framework API MAP (0) | 2011/09/08 |
|---|---|
| Visual Studio - Windows Service Build Event (0) | 2011/08/17 |
| Hooking on C# (0) | 2011/07/07 |
| C# SMTP Send use GMAIL (0) | 2011/04/14 |
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
| Q&A - Send a None exist email with SmtpClient(C#) (0) | 2011/03/27 |
Gmail을 사용해 SMTP 발송합니다.
Gmail은 smtp.gmail.com의 호스트와 EnableSsl true 설정으로 587 포트로
자신의 id, password를 networkcredential을 생성해서 발송하면 됩니다.
첨부된 프로젝트에서 코드를 확인하실 수 있습니다.
프로젝트의 Property에 Settings에 자신의 메일주소, id, password를 설정한 후 사용할 수 있어요.
(Visual Studio 2010)
'.NET > C#' 카테고리의 다른 글
| Visual Studio - Windows Service Build Event (0) | 2011/08/17 |
|---|---|
| Hooking on C# (0) | 2011/07/07 |
| C# SMTP Send use GMAIL (0) | 2011/04/14 |
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
| Q&A - Send a None exist email with SmtpClient(C#) (0) | 2011/03/27 |
| C# 'this' keyword - Extension Method (0) | 2011/02/25 |
http://www.codeproject.com/KB/files/copydirectoriesrecursive.aspx
Directory.Copy 로는 쉽게 복사가 되지 않는데 위 재귀 방법으로 구현하면 되겠네요.
너무 글이 짧은가;; ㅋㅋ
'.NET > C#' 카테고리의 다른 글
| Hooking on C# (0) | 2011/07/07 |
|---|---|
| C# SMTP Send use GMAIL (0) | 2011/04/14 |
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
| Q&A - Send a None exist email with SmtpClient(C#) (0) | 2011/03/27 |
| C# 'this' keyword - Extension Method (0) | 2011/02/25 |
| Last.fm API and Facebook API for .NET (0) | 2010/11/01 |
http://hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=42400
Question
안녕하세요
웹에서 메일을 발송할때 SmtpCilent 를 사용해서 메일을 발송하는데요~
만약 받는 메일 주소가 잘못된 주소여서 전송이 안 됐을때 로그를 남기려고 합니다.
근데 SmtpFailedRecipientsException 이 부분에선 잡히지가 않는거 같아서요...
없는 메일주소로 발송을 해보면... 큐에 잠깐 들어갔다가 배드 메일로 빠지고 아무런 오류도 남질 않습니다.
회원들중에 잘못된 메일 주소를 등록한 회원이라면 메일주소를 초기화 시켜주려고 하는데요
어떻게 로그를 남길 방법이 없을까요?
해결 방법이 있으면 조언좀 부탁드립니다!!
수고하세요^^
Answer
일단 발생하는 시차가 생기는데요.
발송 시 오류는 프로그램에서 Catch가 될 텐데
발송 후 오류는 프로그램에서 잡지 못할 수 있어요. (예: 메일주소 틀린경우, 메일 박스 꽉찬 경우 등)
익셉션의 ex.StatusCode 가 MailboxBusy일 때는 몇 초 후 다시 보내면 되는데,
그 외에는 오류 로그로 남겨서 찾아보시면 될 것 같네요.
참고 URL : http://hanssens.org/post/SmtpFailedRecipientsException-Catch-undeliverable-mail.aspx
'.NET > C#' 카테고리의 다른 글
| C# SMTP Send use GMAIL (0) | 2011/04/14 |
|---|---|
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
| Q&A - Send a None exist email with SmtpClient(C#) (0) | 2011/03/27 |
| C# 'this' keyword - Extension Method (0) | 2011/02/25 |
| Last.fm API and Facebook API for .NET (0) | 2010/11/01 |
| Windows Service Debugging (0) | 2009/10/21 |
(* over .NET Framework 3.5)
ref url. http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
this 키워드를 통해 기존에 존재하는 Object의 Static 메소드를 추가한 것 처럼 만들 수 있다.
public static class ScottGuExtensions
{
public static bool IsValidEmailAddress(this string s)
{
Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
return regex.IsMatch(s);
}
}
스캇 구슬희 형님의 VS에서 인텔리센스 되는 모습..

'.NET > C#' 카테고리의 다른 글
| C# - Diroctory Copy (Recursive method) (0) | 2011/03/29 |
|---|---|
| Q&A - Send a None exist email with SmtpClient(C#) (0) | 2011/03/27 |
| C# 'this' keyword - Extension Method (0) | 2011/02/25 |
| Last.fm API and Facebook API for .NET (0) | 2010/11/01 |
| Windows Service Debugging (0) | 2009/10/21 |
| Unicode 한글 코드 표 (0) | 2009/09/27 |
ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization

원문 참조 : http://aspalliance.com/1537_ICallback__JSON_Based_JavaScript_Serialization.1
* 4월 19일 추가 내용
프로젝트 기반은 .NET Framework 3.5 프로젝트로 설정하고 진행하셔야 합니다.
그리고 제가 테스트해 본 소스도 첨부합니다.
예제 소스 파일 다운로드 :
아직 테스트 해보지는 않은 코드이지만 흥미로운 내용이네요~
별다른 라이브러리를 사용하지 않고 ICallback을 이용해서 Javascript Serialization을 JSON Object 형식으로 처리할 수 있는 방법이니깐요.
먼저 Page나 Controll 클래스에서 System.Web.UI.ICallbackEventHandler를 Implement 해야한다고 합니다.
아래 RaiseCallbackEvent 메소드가 자바스크립트 함수를 호출하게 되고요.
RaiseCallbackEvent method invoke through JavaScript function
public void RaiseCallbackEvent(string eventArgument)
{
//to do code here
}
RaiseCallbackEvent가 완료되면 알아서 GetCallbackResult가 호출되도록 하고요.
GetCallbackResult method invokes itself when the processing of RaiseCallbackEvent method is completed.
public string GetCallbackResult()
{
return "";
}
이제 Page_Load나 Page_Init 부분에서 사용자 스크립트를 등록합니다. 'CallServer' 형식으로 아래 예제는 등록하고 있네요.
해당 스크립트에선 CallbackEventReference 를 가져가니 서버측을 호출하도록 되어있죠.
이렇게 하면 C/S 간의 상호 호출되는 부분이 완성되는 듯 합니다.
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager scriptMgr = Page.ClientScript;
String cbReference = scriptMgr.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "");
String callbackScript = "function CallServer(arg, context) {" + cbReference + "; }";
scriptMgr.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);
}
이제 사용자 쪽의 스크립트를 등록합니다.
버튼을 클릭하면 CallSrv를 호출하고 CallServer는 서버측 메소드를 호출해 결과값은 ReceiveServerData를 통해 받도록 되어 있죠.
<script language=javascript type=text/javascript>
function ReceiveServerData(arg, context)
{
alert(arg); //just to show output
}
function CallSrv()
{
CallServer('get customer', '');
}
</script>
<input type="button" value="get customer" onclick="CallSrv()" />
이제 서버측에서 customer 형식에 대한 정의가 필요하겠죠. 아래와 같은 JAVA에서 보면 Beans 와 같은 C# 에서의 클래스 하나를 정의합니다.
public class Customer
{
public string Name;
public int Age;
}
이제 핵심적으로 RaiseCallbackEvent 를 정의하는데요.
이 부분이 가장 핵심인 것 같네요.
System.Web.Script.Serialization.JavaScriptSerializer
를 사용하고 있고, 이를 통해서 JSON 형식으로 Object를 반환하도록 해줍니다.
C# 에서의 Class Object (Java로 보면 Beans) 형식을 JSON 형식으로 변수로 받으면
Javascript에서도 객체 형식으로 바로 사용할 수 있게 되겟네요
public void RaiseCallbackEvent(string eventArgument)
{
//populate Customer object to return
Customer customer = new Customer();
customer.Name = "Muhammad Adnan";
customer.Age = 24;
//javascript serialization of Customer object
System.Web.Script.Serialization.JavaScriptSerializer jss;
jss = new System.Web.Script.Serialization.JavaScriptSerializer();
//stringbuilder to contain serialized customer object
System.Text.StringBuilder sbCustomer = new System.Text.StringBuilder();
jss.Serialize(customer, sbCustomer);
jsonResult = sbCustomer.ToString();
}
public string GetCallbackResult()
{
return jsonResult;
}
아래 메시지는 샘플로 출력해본 내용입니다.
별 다른 라이브러리를 사용하거나 하지 않고,
페이지의 PostBack이 일어나거나 페이지가 Refresh 되지 않고 데이터 처리하는 내용으로 아주 좋은 활용이 되겠네요 ^ ^
'.NET > ASP.NET' 카테고리의 다른 글
| ASP.NET - ICallback을 이용한 JSON 기반의 Javascript Serialization (0) | 2010/04/15 |
|---|---|
| web.config 암호화 - Encrypt Configuration Sections in ASP.NET 2.0 Using RSA (0) | 2010/04/12 |
| ASP.NET Layout 각 폴더 별 설명 (0) | 2010/04/05 |
| ASP.NET 2.0 AJAX - UpdateProgress (0) | 2009/10/11 |
| A .NET library for OpenFlashChart control (0) | 2009/03/29 |
| iTunes Data Grid Skin for ASP.NET GridView, ListView Control (0) | 2009/02/02 |
이전에 올렸던 Length 단위에 이어 두번째 File Size 관련된 단위입니다.
귀찮았는데 막상 파일사이즈를 보여야 할 일이 있어서
간단히 Property 를 이용해서 작성해 봤네요.
C# 프로퍼티(Property)의 가장 적절한 예가 아닌가 생각됩니다. ㅋㅋㅋ
class FileSize
{
public enum UNITS { B, KB, MB, GB, TB }
double b = 0;
double kb = 0;
double mb = 0;
double gb = 0;
double tb = 0;
public double B
{
get
{
return this.b;
}
set
{
this.b = value;
this.kb = this.b / 1024;
this.mb = this.kb / 1024;
this.gb = this.mb / 1024;
this.tb = this.gb / 1024;
}
}
public double KB
{
get
{
return this.kb;
}
set
{
this.kb = value;
this.B = this.kb * 1024;
}
}
public double MB
{
get
{
return this.mb;
}
set
{
this.mb = value;
this.KB = this.mb * 1024;
}
}
public double GB
{
get
{
return this.gb;
}
set
{
this.gb = value;
this.MB = this.gb * 1024;
}
}
public double TB
{
get
{
return this.tb;
}
set
{
this.tb = value;
this.GB = this.tb * 1024;
}
}
public FileSize(double size)
{
this.B = size;
}
public override string ToString()
{
string ret = string.Empty;
if (b < 1024D)
{
ret = string.Format("{0}{1}", b, UNITS.B.ToString());
}
else if (kb < 1024D)
{
ret = string.Format("{0}{1}", kb, UNITS.KB.ToString());
}
else if (mb < 1024D)
{
ret = string.Format("{0}{1}", mb, UNITS.MB.ToString());
}
else if (gb < 1024D)
{
ret = string.Format("{0}{1}", gb, UNITS.GB.ToString());
}
else
{
ret = string.Format("{0}{1}", tb, UNITS.TB.ToString());
}
return ret;
}
}
'.NET > C#' 카테고리의 다른 글
| Windows Service Debugging (0) | 2009/10/21 |
|---|---|
| Unicode 한글 코드 표 (0) | 2009/09/27 |
| C# : Unit Class - File Size (0) | 2009/05/14 |
| Memory usage of current thread on C# windows form app. (0) | 2009/04/23 |
| C# : TextBox Auto Scrolling (2) | 2009/04/20 |
| Better string.IsNullOrEmpty() ? How to do C#.NET 3.0 (0) | 2009/04/14 |
TextBox의 스크롤을 지정하기 위해 일단 Multiline 모드를 설정하고, Scrollbar가 Vertical로 되어 있다면 더 좋겠죠.
1. 다음과 같이 TextBox에 값을 설정 후
textBox.Text = "some string";
스크롤이 생길 정도의 문자열을 넣어도 스크롤은 위에 고정되어 있습니다.
계속 바닥으로 스크롤이 되어있기 원한다면
textBox.Select(textBox.Text.Length, 0);
textBox.ScrollToCaret();
위와 같은 코드를 값을 입력 후 실행해 줍니다.
2. 문자열 값을 추가하고 항상 scroll을 바닥으로 하고 싶다면.
textBox.Text += "some string";
위와 같은 코드는 피해야 합니다.
textBox.AppendText("some string");
대신 AppendText(string) 메소드를 사용하면 값을 입력한 후 스크롤이 바닥으로 이동합니다.
'.NET > C#' 카테고리의 다른 글
| C# : Unit Class - File Size (0) | 2009/05/14 |
|---|---|
| Memory usage of current thread on C# windows form app. (0) | 2009/04/23 |
| C# : TextBox Auto Scrolling (2) | 2009/04/20 |
| Better string.IsNullOrEmpty() ? How to do C#.NET 3.0 (0) | 2009/04/14 |
| C# - Length unit class , 길이 관련 클래스 (0) | 2009/04/10 |
| Error Handling Guide - Rethrow to preserve stack details (0) | 2009/04/03 |
String.IsNullOrEmpty() 더 잘 활용해보자
http://blog.yesnobox.com/post/Better-stringIsNullOrEmpty().aspx
우리가 자주 사용하는 string.IsNullOrEmpty()
다들 이 메소드를 사용하면서 익숙해졌겠지만.
아마도 한번쯤 이런생각을 했을지 모른다.
str.ToString() 처럼 object내의 메소드로 만들지 않고 왜 Class의 static 메소드로 만들었을까?
str.IsNullOrEmpty()로 사용하면 편할텐데.. ?
위 주소에 위와 같은 생각을 해결해 줄 수 있다.
'.NET > C#' 카테고리의 다른 글
| Memory usage of current thread on C# windows form app. (0) | 2009/04/23 |
|---|---|
| C# : TextBox Auto Scrolling (2) | 2009/04/20 |
| Better string.IsNullOrEmpty() ? How to do C#.NET 3.0 (0) | 2009/04/14 |
| C# - Length unit class , 길이 관련 클래스 (0) | 2009/04/10 |
| Error Handling Guide - Rethrow to preserve stack details (0) | 2009/04/03 |
| 훈스 C# 스터디 5주차 - CLR의 동작 , 메모리 관리, Boxing, UnBoxing, Generic (0) | 2009/03/11 |

GmailSmtpTest1.zip


Prev




