성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Azure Web App 확장 예제 - Simple WebSite Extension</h1> <p> Azure의 Web App(App Service)에는 '확장'이라는 것을 설치할 수 있습니다. 일례로 Let's encrypt 무료 인증서를 쉽게 설치/갱신해주는 확장도,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Azure Let's Encrypt ; <a target='tab' href='https://www.siteextensions.net/packages/letsencrypt/'>https://www.siteextensions.net/packages/letsencrypt/</a> Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11502'>http://www.sysnet.pe.kr/2/0/11502</a> </pre> <br /> 그 형식으로 만들어진 것입니다. 그럼, 이런 걸 우리도 만들 수 있지 않을까요? ^^ 이에 대해 다음의 글에서 자세하게 설명하고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Azure Web Sites Extensions ; <a target='tab' href='https://azure.microsoft.com/en-us/blog/azure-web-sites-extensions/'>https://azure.microsoft.com/en-us/blog/azure-web-sites-extensions/</a> </pre> <br /> 그리고 그 시작으로 github에 확장 예제가 공개되어 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Azure - Site Extensions ; <a target='tab' href='https://github.com/projectkudu/FileCounterSiteExtension'>https://github.com/projectkudu/FileCounterSiteExtension</a> </pre> <br /> 빌드 및 배포 방법은 역시 README.md 파일에 다음과 같이 잘 소개하고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ## To build it and directly upload it to a site 1. Clone this repository. 2. Run `build.cmd`. This will zip the extension files in `artifacts\Release\zip` folder. 3. Copy `Deployment Trigger Url` from Azure portal for your website (in CONFIGURE TAB when you have git enabled). 4. Upload extension to your website by `artifacts\Release\zip\DeployExtension.cmd "<deploy-trigger-url>"`. 5. Restart your site. You may use Portal to do so. 6. You can now access this simple extension via `<scm-url>/filecounter`. </pre> <br /> 이를 위해 nuget.exe를 다운로드해,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > NuGet - Installing ; <a target='tab' href='https://docs.nuget.org/consume/command-line-reference'>https://docs.nuget.org/consume/command-line-reference</a> ; <a target='tab' href='https://dist.nuget.org/win-x86-commandline/latest/nuget.exe'>https://dist.nuget.org/win-x86-commandline/latest/nuget.exe</a> </pre> <br /> PATH 환경 변수의 연결된 경로에 복사하고 build.cmd 파일을 실행합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > E:\sample\FileCounterSite> <span style='color: blue; font-weight: bold'>build.cmd</span> Microsoft (R) Build Engine version 4.7.2556.0 [Microsoft .NET Framework, version 4.0.30319.42000] Copyright (C) Microsoft Corporation. All rights reserved. E:\sample\FileCounterSite\artifacts\Release\zip\SimpleWebSiteExtension.zip created. Attempting to build package from 'FileCounter.nuspec'. Successfully created package 'artifacts\Release\filecounter.1.0.21.nupkg'. </pre> <br /> 그다음 Azure Portal에서 해당 App Services의 "속성"으로 가면 다음과 같은 형식의 "Deployment Trigger Url(배포 트리거 URL)"을 구할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='appservice_ext_deploy_url_1.png' src='/SysWebRes/bbs/appservice_ext_deploy_url_1.png' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > https://...[생략]...xr6@[yoursitename].scm.azurewebsites.net/deploy </pre> <br /> 따라서, 저 경로를 DeployExtension.cmd의 인자로 넘겨 주면 내부에서 curl.exe를 이용해 서버로 전송합니다. <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > E:\sample\FileCounterSite> artifacts\Release\zip\DeployExtension.cmd https://...[생략]...xr6@[yoursitename].scm.azurewebsites.net/deploy </pre> <br /> 그런데 DeployExtension.cmd 안의 내용을 보면 curl.exe가 "%ProgramFiles(x86)%\git\bin" 폴더에 있다고 가정하기 때문에 curl.exe를 그 폴더에 넣어 두어야 합니다. 또는, 그냥 다음과 같이 curl.exe를 직접 실행해도 무방합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [형식] curl.exe -k -v -T "[업로드할 zip 파일 경로]" "[마지막 deploy 경로를 자른 Deployment Trigger Url]/zip" </pre> <br /> curl로 실행할 때 주의할 것은 "Deployment Trigger Url"로 구한 "https://...[생략]...xr6@[yoursitename].scm.azurewebsites.net/deploy" 경로에서 마지막 "/deploy"를 "/zip"으로 교체해야 한다는 것입니다. 따라서 다음과 같이 실행하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > E:\sample\FileCounterSite> <span style='color: blue; font-weight: bold'>curl.exe -k -v -T "E:\sample\FileCounterSite\artifacts\Release\zip\SimpleWebSiteExtension.zip" "https://...[생략]...@[yoursitename].scm.azurewebsites.net/zip"</span> * Trying 52.231.32.120... * Connected to [yoursitename].scm.azurewebsites.net (52.231.32.120) port 443 (#0) * schannel: SSL/TLS connection with [yoursitename].scm.azurewebsites.net port 443 (step 1/3) ...[생략]... * schannel: decrypted data returned 409 * schannel: decrypted data buffer: offset 0 length 16384 < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Expires: -1 < Server: Microsoft-IIS/10.0 < x-ms-request-id: 834c7086-4afc-4c8a-a252-36294aa19b99 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Set-Cookie: ARRAffinity=661589...[생략]...f0bb;Path=/;HttpOnly;Domain=[yoursitename].scm.azurewebsites.net < Date: Wed, 18 Apr 2018 06:42:39 GMT < Content-Length: 0 < * Connection #0 to host [yoursitename].scm.azurewebsites.net left intact </pre> <br /> 위와 같이 배포 후 Azure Portal을 통해 해당 App Service를 재시작한 후 다음의 경로로 방문하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > https://[yoursitename].scm.azurewebsites.net/filecounter </pre> <br /> 여러분들의 Web App 사이트에 몇 개의 파일이 있는지 보여주는 페이지가 뜨게 됩니다. 참고로, App Service를 재시작하지 않으면 다음과 같은 오류 화면만 보게 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "No route registered for '/filecounter'" </pre> <br /> <hr style='width: 50%' /><br /> <br /> curl.exe로 "Deployment Trigger Url(배포 트리거 URL)"에 배포하면 다음의 경로에 확장 파일들이 풀립니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > %HOME%\SiteExtensions\filecounter \applicationHost.xdt \default.aspx (%HOME% == d:\home) </pre> <br /> 2개의 배포 파일 내용은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <span style='color: blue; font-weight: bold'>[applicationHost.xdt 파일]</span> <?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.applicationHost> <sites> <site name="%XDT_SCMSITENAME%" xdt:Locator="Match(name)"> <application path="/filecounter" xdt:Locator="Match(path)" xdt:Transform="Remove" /> <application path="/filecounter" applicationPool="%XDT_APPPOOLNAME%" xdt:Transform="Insert"> <virtualDirectory path="/" physicalPath="%XDT_EXTENSIONPATH%" /> </application> </site> </sites> </system.applicationHost> </configuration> <span style='color: blue; font-weight: bold'>[default.aspx 파일]</span> <%@ language="C#" Debug="true" %> <%@ Import Namespace="System.IO" %> <% // Find the site's web root string folder = Environment.ExpandEnvironmentVariables(@"%HOME%\site\wwwroot"); int fileCount = Directory.GetFiles(folder, "*.*", SearchOption.AllDirectories).Length; %> <h1>World's most amazing file counter</h1> <h2>Your site has <%= fileCount %> files!</h2> </pre> <br /> 대충 감이 오시죠? ^^ 그러니까, Azure Web App 확장도 역시 하나의 웹 사이트일 뿐입니다. 참고로 FileCounter 확장에 대한 좀 더 자세한 설명은 다음의 글에서 읽어볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Writing a Site Extension for Azure Websites ; <a target='tab' href='https://azure.microsoft.com/en-us/blog/writing-a-site-extension-for-azure-websites/'>https://azure.microsoft.com/en-us/blog/writing-a-site-extension-for-azure-websites/</a> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1835
(왼쪽의 숫자를 입력해야 합니다.)