안녕하세요.
오늘은 asp.net을 무료로 호스팅 할 수 있는 사이트를 추천해드리려고 합니다.
비록 60일 간만 무료로 사용할 수 있지만, 공부를 하는 학생이나 자신의 웹 사이트를 테스트 해보고자 하는 분들에게 유용할 듯 합니다.
저 역시 유료로 호스팅 서비스를 결제하기 전에 테스트용으로 사용하고 있습니다.

step1. 회원가입

회원 가입을 위해 아래의 사이트로 이동합니다.
SmarterASP.NET

-> Learn More 클릭!


-> 저희는 무료로 사용할 것이기 때문에, 60 DAYS Trial 을 선택해 줍니다.


-> 가입 정보 입력 + Your Total 이 $0 임을 확인하시고 Signup Now 버튼을 눌러줍니다.


step2. 홈페이지 관리

가입 완료 후 로그인 하시면 상단에 여러가지 메뉴를 확인 하실 수 있습니다.
SmarterASP.NET 에서는 다양한 방법으로 파일을 관리 할 수 있습니다.
Notepad++ , EditPlus 등을 통해 간단하게 ftp 접속해서 이용하능하고, Visual Studio 를 통해 소스배포 또한 가능합니다.

저도 전부 다 사용해보진 않았지만, 데이터베이스, DNS, SSL 등 다양한 메뉴를 통해서 웹 사이트를 관리 할 수 있습니다.




step3. 소스배포하기

다양한 방식으로 파일관리가 가능하지만, 주로 VisualStudio를 통해서 게시하는 경우가 많기 때문에, 간단하게 한번 살펴보도록 하겠습니다.

저는 VisualStudio 2010 버전을 사용하여 웹사이트를 게시해 보겠습니다.


-> 게시할 사이트 선택 우클릭 후 게시 클릭!


-> 게시 프로필 설정 후 게시 클릭!




주의 1 : 기본적으로 Mapped Path 는 /site1 로 설정이 되어 있는데, 이 부분을 변경 하셨다면 소스 배포시에도 동일하게 수정 해 주셔야 합니다.


주의 2 : 소스 배포 후 정상적으로 작동 하지 않는다면, 시작페이지가 index 또는 default 로 되어 있는지 확인해야 합니다. SmarterASP.NET 에서는 시작페이지로 동작하는 페이지가 정해져 있습니다.



이상입니다.

궁금한 사항이 있으시면 댓글 남겨주세요.

감사합니다.









XML 통신

1.ASP.NET XML 전송 후 응답받기





 
1
2
3
4
5
6
7
8
9
10
11
        public ActionResult PostTest()
        {
            XmlDocument xmlObj = new XmlDocument();
            string xmlStr = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>";
            xmlObj.LoadXml(xmlStr);
            string reqUrl = "http://hope20603-001-site1.smarterasp.net/xmlreq.asp";
            PostXMLTransaction(reqUrl, xmlObj);
 
            return View();
        }
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/// <summary>
        /// xml 통신
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <returns></returns>
        public static XmlDocument PostXMLTransaction(string v_strURL, XmlDocument v_objXMLDoc)
        {
            XmlDocument XMLResponse = null;
            HttpWebRequest objHttpWebRequest;
            HttpWebResponse objHttpWebResponse = null;
            Stream objRequestStream = null;
            Stream objResponseStream = null;
            XmlTextReader objXMLReader;
 
            objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
 
            try
            {
                
 
                
                byte[] bytes;
                bytes = System.Text.Encoding.ASCII.GetBytes(v_objXMLDoc.InnerXml);
                objHttpWebRequest.Method = "POST";
                objHttpWebRequest.ContentLength = bytes.Length;
                objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";
                
                objRequestStream = objHttpWebRequest.GetRequestStream();
                objRequestStream.Write(bytes, 0, bytes.Length);
                objRequestStream.Close();
 
                objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
 
                if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                
                    objResponseStream = objHttpWebResponse.GetResponseStream();
                    objXMLReader = new XmlTextReader(objResponseStream);
                    
                    XmlDocument xmldoc = new XmlDocument();
                    xmldoc.Load(objXMLReader);
                    XMLResponse = xmldoc;
                    string response = XMLResponse.InnerText;
                    objXMLReader.Close();
                }
                
                objHttpWebResponse.Close();
            }
            catch (WebException we)
            {
                throw new Exception(we.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                
                objRequestStream.Close();
                objResponseStream.Close();
                objHttpWebResponse.Close();
                
                objXMLReader = null;
                objRequestStream = null;
                objResponseStream = null;
                objHttpWebResponse = null;
                objHttpWebRequest = null;
            }
            
            return XMLResponse;
        }
cs

2. ASP XML데이터 받은 후 리턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<%
    Dim xmlDoc
    Dim userName
    set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async="false"
    xmlDoc.load(Request)
    userName = xmlDoc.documentElement.selectSingleNode("UserName").firstChild.nodeValue
 
 
    response.contenttype="text/xml"
    response.write("<?xml version='1.0' encoding='euc-kr'?>")
    response.write("<booking_info xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>")
    response.write("    <error>[ "& userName &" ] </error>")
    response.write("</booking_info>")
 
 
%>
cs


ASP.NET Twitter api 1.1

step 1.

트위터 api를 사용하려면 인증된 아이디가 필요하다.

— 참고 페이지 —
인증 받는 법 : Twitter API v1.1 with OAuth
인증 받는 곳 : 트위터 개발자 페이지

step 2.

트위터 서비스 관련 함수
구글링을 통해 가져온 소스가 다수 포함되어 있으나, 정확한 출처를 기억하지 못해 적지 못하였습니다. 출처 아시는 분은 제보 부탁드려요.

/// <summary>
        /// 트위터 API 접속 ID 등 세팅
        /// </summary>
        public void SetTwitterApi(string _consumerkey, string _consumersecret, string _accesstoken, string _accesssecret)
        {
            this.consumerkey = _consumerkey;
            this.consumersecret = _consumersecret;
            this.accesstoken = _accesstoken;
            this.accesssecret = _accesssecret;
        }

        public DataTable GetTwiter(int cnt)
        {
            #region api 1.1

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=받은 아이디");
            sb.AppendLine("&trim_user=false");
            sb.AppendLine("&count=" + cnt + "");

            //트위터 개발자 사이트에서 얻은 값을 입력.
            string oauthconsumerkey = "";
            string oauthconsumersecret = "";
            string oauthtoken = "";
            string oauthtokensecret = "";

            SetTwitterApi(oauthconsumerkey, oauthconsumersecret, oauthtoken, oauthtokensecret);
            string jsonStrTimeline = GetTwitterData(sb.ToString());
            JsonTextParser parser = new JsonTextParser();
            JsonArrayCollection jArr = parser.Parse(jsonStrTimeline) as JsonArrayCollection;

            dt.Columns.Add(new DataColumn("ID", typeof(string)));                               // 트위터 글번호
            dt.Columns.Add(new DataColumn("TEXT", typeof(string)));                             // 트위터 내용
            dt.Columns.Add(new DataColumn("CREATED_AT", typeof(string)));                       // 작성일자
            dt.Columns.Add(new DataColumn("PROFILE_IMAGE_URL", typeof(string)));                // 프로파일 이미지

            DataRow dr = null;
            foreach (JsonCollection twit in jArr)
            {
                dr = dt.NewRow();
                dr[0] = twit[2].GetValue();
                dr[1] = twit[3].GetValue();
                dr[2] = twit[0].GetValue();
                JsonObjectCollection user = twit[11] as JsonObjectCollection;
                dr[3] = user[27].GetValue();
                dt.Rows.Add(dr);
            }

            #endregion

            return dt;
        }

        #endregion

        #region [   트위터 서비스 관련 함수   ]

        private string EncodeCharacters(string data)
        {
            //as per OAuth Core 1.0 Characters in the unreserved character set MUST NOT be encoded
            //unreserved = ALPHA, DIGIT, '-', '.', '_', '~'
            if (data.Contains("!"))
                data = data.Replace("!", "%21");
            if (data.Contains("'"))
                data = data.Replace("'", "%27");
            if (data.Contains("("))
                data = data.Replace("(", "%28");
            if (data.Contains(")"))
                data = data.Replace(")", "%29");
            if (data.Contains("*"))
                data = data.Replace("*", "%2A");
            if (data.Contains(","))
                data = data.Replace(",", "%2C");

            return data;
        }  

        //this gets the json data from twitter api
        public string GetTwitterData(string resourceurl)
        {
            //create parameter list
            List<string> parameterlist;
            //check for query string
            if (resourceurl.Contains("?"))
            {
                parameterlist = getparameterlistfromurl(resourceurl);
                resourceurl = resourceurl.Substring(0, resourceurl.IndexOf('?'));
            }

            else
            {
                parameterlist = null;
            }
            //build the oauth header
            string authheader = buildheader(resourceurl, parameterlist);

            //make the request to the twitter api and get the JSON response
            string jsonresponse = TwitterWebRequest(resourceurl, authheader, parameterlist);

            return jsonresponse;


        }

        //retreive a list if parameters from the resource url. This will be used when making the request to the twitter api and in generating the signature
        private List<string> getparameterlistfromurl(string resourceurl)
        {

            //Uri MyUrl = new Uri(resourceurl);
            string querystring = resourceurl.Substring(resourceurl.IndexOf('?') + 1);

            List<string> listtoreturn = new List<string>();

            NameValueCollection nv = HttpUtility.ParseQueryString(querystring);

            foreach (string parameter in nv)
            {
                listtoreturn.Add(parameter + "=" + Uri.EscapeDataString(nv[parameter].ToString()));

            }
            return listtoreturn;
        }



        //this gets the timeline data from twitter api
        private string buildheader(string resourceurl, List<string> parameterlist)
        {

            string nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
            TimeSpan timespan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            string timestamp = Convert.ToInt64(timespan.TotalSeconds).ToString();

            string signature = getSignature(nonce, timestamp, resourceurl, parameterlist);

            // build the authentication header with all information collected

            var HeaderFormat = "OAuth " +
            "oauth_consumer_key=\"{0}\", " +
            "oauth_nonce=\"{1}\", " +
            "oauth_signature=\"{2}\", " +
            "oauth_signature_method=\"{3}\", " +
            "oauth_timestamp=\"{4}\", " +
            "oauth_token=\"{5}\", " +
            "oauth_version=\"{6}\"";

            string authHeader = string.Format(HeaderFormat,
            Uri.EscapeDataString(consumerkey),
            Uri.EscapeDataString(nonce),
            Uri.EscapeDataString(signature),
            Uri.EscapeDataString(signaturemethod),
            Uri.EscapeDataString(timestamp),
            Uri.EscapeDataString(accesstoken),
            Uri.EscapeDataString(version)
            );

            return authHeader;

        }



        private string getSignature(string nonce, string timestamp, string resourceurl, List<string> parameterlist)
        {
            // generate the base string for the signature

            string baseString = generatebasestring(nonce, timestamp, resourceurl, parameterlist);

            baseString = string.Concat("GET&", Uri.EscapeDataString(resourceurl), "&", Uri.EscapeDataString(baseString));


            // generate the signature using the base string, consumer secret and access secret from the application api. Using the HMAC-SHA1 signature method

            var signingKey = string.Concat(Uri.EscapeDataString(consumersecret), "&", Uri.EscapeDataString(accesssecret));
            string signature;

            //generate hash using signing key
            HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(signingKey));

            signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
            //get signature signature using the hash

            return signature;

        }

        private string generatebasestring(string nonce, string timestamp, string resourceurl, List<string> parameterlist)
        {

            string basestring = "";
            //create list with all the security parameters
            List<string> baseformat = new List<string>();
            baseformat.Add("oauth_consumer_key=" + consumerkey);
            baseformat.Add("oauth_nonce=" + nonce);
            baseformat.Add("oauth_signature_method=" + signaturemethod);
            baseformat.Add("oauth_timestamp=" + timestamp);
            baseformat.Add("oauth_token=" + accesstoken);
            baseformat.Add("oauth_version=" + version);


            //append parameter list as twitter requires the parameters to be in alphabetical order
            if (parameterlist != null)
            {
                baseformat.AddRange(parameterlist);

            }
            //sort list alphabetically
            baseformat.Sort();


            //loop through list and generate base string

            foreach (string value in baseformat)
            {
                basestring += value + "&";
            }

            basestring = basestring.TrimEnd('&');

            return basestring;


        }

        //makes the request to twitter and returns a string of JSON data

        private string TwitterWebRequest(string resourceurl, string authheader, List<string> parameterlist)
        {

            //build  the http web request to the twitter api
            ServicePointManager.Expect100Continue = false;

            string postBody;

            if (parameterlist != null)
            {
                postBody = GetPostBody(parameterlist);
            }
            else
            {
                postBody = "";
            }
            resourceurl += "?" + postBody;



            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resourceurl);
            request.Headers.Add("Authorization", authheader);
            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";

            // Retrieve the response json data
            WebResponse response = request.GetResponse();

            //json reponse data
            string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();

            return responseData;

        }

        private string GetPostBody(List<string> parameterlist)
        {
            string stringtoreturn = "";

            foreach (string item in parameterlist)
            {
                stringtoreturn += item + "&";

            }
            stringtoreturn = stringtoreturn.TrimEnd('&');
            return stringtoreturn;

        }

        #endregion

위 소스 중 아래 부분은 System.Net.Json.dll 파일이 추가 되어야 함.

JSON for.NET Download

JsonTextParser = new JsonTextParser();
JsonArrayCollenction = parser.Parse(jsonStrTimeline) as JsonArrayCollection;

+ Recent posts