http://blogs.msdn.com/b/yaohuang1/archive/2013/01/20/design-time-generation-of-help-page-or-proxy-for-asp-net-web-api.aspx


Web API 의 도움말 페이지를  생성해 준다.

개발자간 API 공유에 도움이 되며, 문서화 작업에도 도움이 될 듯

신고

'DotNet > asp.net web api' 카테고리의 다른 글

ASP.NET WEB API help page 생성  (0) 2013.01.22

댓글을 달아 주세요

http://weblogs.asp.net/jgalloway/archive/2011/10/26/using-node-js-in-an-asp-net-mvc-application-with-iisnode.aspx


Node.js is an event-driven I/O server-side JavaScript environment based on the open-source V8 Javascript engine. It's really easy to run it on Windows now, and if you run it under iisnode, it's actually running under a standard IIS Handler, which means you can integrate it directly into ASP.NET applications.

신고

'DotNet > asp.net' 카테고리의 다른 글

Node.js 와 Asp.net 병합  (3) 2012.10.23
asp.net mvc4  (0) 2012.10.09
EF4 성능 개선 : Complied Query 에 대하여  (1) 2012.06.18
Expire 해더의 미스테리  (0) 2010.04.20
asp.net 에서 브라우저 캐시 다루기  (0) 2010.04.20
asp.net 에서 경로(path) 에 관한 정리  (0) 2010.04.19

댓글을 달아 주세요

  1. Favicon of http://www.moncleroutletespain.com/ BlogIcon moncler 2013.01.05 21:15 신고 Address Modify/Delete Reply

    "Il n'y a aucune ambigu, http://www.moncleroutletespain.com/ moncler?té. Nos soldats, http://www.moncleroutletespain.com/ moncler chaquetas, les soldats de la France, n'ont pas vocation à s'ingérer dans les affaires intérieures de la C?te d'Ivoire, http://www.moncleroutletespain.com/ moncler españa. Ils agissent, http://www.moncleroutletespain.com/ moncler outlet, nos soldats, http://www.moncleroutletespain.com/ moncler online, en vertu d'un mandat, d'un mandat des Nations unies", http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, a déclaré Nicolas Sarkozy lors de ses voeux aux armées.Related articles:


    http://gomoo.tistory.com/86 http://gomoo.tistory.com/86

    http://akiramoon.net/356 http://akiramoon.net/356

  2. Favicon of http://c.planchasghdav.com/ BlogIcon ghd baratas 2013.04.11 15:55 신고 Address Modify/Delete Reply

    손문(孫文:1866-1925)은 중국 근대 민주혁명의 선구자이며 위대한 민족주의 혁명가이다 http://c.toryburchoutletxo.com/ Tory Burch Heels.

  3. Favicon of http://www.2013mbtshoesonline.com BlogIcon cheap mbt 2013.05.17 14:59 신고 Address Modify/Delete Reply

    한 사람을 잃게 된다는 제일 큰 아쉬움은 내 앞에 있는 니 마음이 변해져 가고있는거야.
    Topics related articles:


    http://suwondatarecovery.tistory.com/?page=32 新建文章 4

    http://canisx.tistory.com/entry/Mission-X-3-REASON 新建文章 6

    http://sompy.tistory.com/255 新建文章 4

    http://yunphill.tistory.com/m/post/view/id/2200 新建文章 10

asp.net mvc4

DotNet/asp.net 2012.10.09 09:51 |

안드로이드를 하다가 이제 보니 mvc4가 이미 오래전에 나와있다.

대략 보니까..

http://www.asp.net/web-api 

open api를 쉽게 만들수 있게 지원해주는 기능이 추가되었고.


http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-4-mobile-features

모바일 웹 개발 기능이 추가되었다.

여러 모바일 브라우저 애뮬레이터가 추가된 듯.

그리고 모바일 프로젝트 템플릿도 추가 되었다.

http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253808


그리고 비동기 Task 메서드도 지원을 하는데

http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4

Task 는 기존의 비동기 방식을 보다 편리하게 해주는 클래스로 await 와 async 키워드를 사용하는 Task-based Asynchronous Pattern (TAP) 이라고 한다.

어디에서 쓰는 것일까? 

http://www.taeyo.net/Columns/View.aspx?IDX=0&PSEQ=35&SEQ=433 여기에 설명이 잘 나온듯.

일반적으로, 다음과 같은 상황에서는 동기적 메서드를 사용하십시오.

  • 메서드가 단순하거나 짧은 시간 안에 완료됩니다.
  • 단순성이 효율성보다 중요합니다.
  • 동작들이 기본적으로 광범위한 디스크나 네트워크 부하를 포함하는 동작이 아닌 CPU 집약적인 동작인 경우. CPU 위주의 동작에 대해 비동기 액션 메서드를 사용하는 경우에는 이득이 없으며 더 많은 부하를 야기할 수 있습니다.

일반적으로 다음과 같은 상황에서 비동기 메서드를 사용하십시오.

  • .NET 4.5 이상의 버전을 사용하고 있으며, 비동기 메서드를 통해 처리할 수 있는 서비스를 호출하고 있습니다.
  • 요청들이 CPU 보다는 네트워크 혹은 I/O에 더 밀접한 관련이 있습니다.
  • 병렬성이 코드의 단순성보다 중요합니다.
  • 사용자들이 오래 걸리는 요청을 취소할 수 있도록 하는 기능을 제공하고자 합니다.
  • 스레드 간의 전환으로 얻는 이득이 스레드 컨텍스트 전환으로 인한 부하보다 더 큰 경우입니다. 일반적으로, 동기적 메서드가 ASP.NET 요청 스레드에 대해 아무 것도 하지 않고 기다리기만 한다면 메서드를 비동기로 만드는 것이 좋습니다. 호출을 비동기로 처리하게 되면, ASP.NET 요청 스레드는 웹 서비스 요청이 완료될 때까지 마냥 기다리면서 시간을 허비하지 않을 것입니다.
  • 테스트에 따르면, 동기적 동작들은 사이트 성능에 있어서 병목지점이 되며 IIS는 이러한 동기적 호출을 비동기로 처리함으로써 더 많은 요청을 처리할 수 있는 것으로 확인되고 있습니다.
이렇다고 한다.

즉, 메서드 안에서 동기1,동기2,동기3 메서드를 순차적으로 호출하는 것 보다는 비동기1,비동기2,비동기3 으로 호출하는 것이 효율적인 경우에 사용하면 된다는 것.

MVC 의 로드맵도 살펴볼 만 하다.
http://aspnetwebstack.codeplex.com/wikipage?title=Roadmap

새로 추가된 SignalR 웹 실시간 통신 프레임웍도 좀 봐야 할 듯.

http://www.dotnetcurry.com/ShowArticle.aspx?ID=780


EF5 보 나왔다.

http://blogs.msdn.com/b/adonet/archive/2012/08/15/ef5-released.aspx

문제가 된 성능 개선이 된것인가

http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0-performance-improvements.aspx

그리고 모델다이어그램을 나눠서 관리하는 것이 가능해진것인가..해봐야 알 듯


신고

'DotNet > asp.net' 카테고리의 다른 글

Node.js 와 Asp.net 병합  (3) 2012.10.23
asp.net mvc4  (0) 2012.10.09
EF4 성능 개선 : Complied Query 에 대하여  (1) 2012.06.18
Expire 해더의 미스테리  (0) 2010.04.20
asp.net 에서 브라우저 캐시 다루기  (0) 2010.04.20
asp.net 에서 경로(path) 에 관한 정리  (0) 2010.04.19

댓글을 달아 주세요

http://peterkellner.net/2012/02/15/linq-to-sql-performance-getting-huge-improvement-in-ef5-microsoft-does-listen/

EF4를 쓰려면 , 빈번히 호출되는 쿼리에 한해서는 반드시 컴파일드쿼리를 쓰는 것이 좋다.

하지만 가독성은 더 나빠지겠군.

 

신고

'DotNet > asp.net' 카테고리의 다른 글

Node.js 와 Asp.net 병합  (3) 2012.10.23
asp.net mvc4  (0) 2012.10.09
EF4 성능 개선 : Complied Query 에 대하여  (1) 2012.06.18
Expire 해더의 미스테리  (0) 2010.04.20
asp.net 에서 브라우저 캐시 다루기  (0) 2010.04.20
asp.net 에서 경로(path) 에 관한 정리  (0) 2010.04.19

댓글을 달아 주세요

  1. Favicon of http://www.christianlouboutinoutletsus.org/ BlogIcon Christain Louboutin Outlet 2012.07.27 18:45 신고 Address Modify/Delete Reply

    Her work as Blanche in Williams' "Streetcar Named Desire" some seasons back suffered from a lack of vocal projection.

http://www.lovehana.com/592?TSSESSIONlovehanacom=6d904c3613aee913757bbb4a6c0c7336

포스트샵을 사용하는 프레임웍을 쓰면서도 이런 기능이 있는 줄 몰랐다.

컴파일시 속도만 따라 준다면 정말 노가다를 줄여주는 기능인듯.
신고

'DotNet' 카테고리의 다른 글

PostSharp 을 이용한 PropertyChanged 이벤트 주입하기  (3) 2011.03.18
Cache(캐시) 관련  (0) 2010.12.23
리소스 사용하기(삽질기)  (1) 2010.05.24
[링크]AOP  (2) 2010.05.17
C# 4.0 에 추가된 기능들  (0) 2010.04.30
VS2010 beta2 동영상  (0) 2010.01.28

댓글을 달아 주세요

  1. Favicon of http://www.intimategadgets.com BlogIcon cheap sex toys 2012.06.18 16:45 신고 Address Modify/Delete Reply

    Sex Toys, Adult Shop - IntimateGadgets.com - Free Shipping

  2. Favicon of http://www.christianlouboutinoutletsus.org/ BlogIcon Louboutin Outlet 2012.07.27 18:45 신고 Address Modify/Delete Reply

    That has Christian Louboutin Lady Peep Sling 150mm Nude/White been pretty much remedied in "Menagerie

  3. Favicon of http://www.moncleroutletespain.com/ BlogIcon moncler españa 2013.01.05 22:34 신고 Address Modify/Delete Reply

    Tourné en 70 mm, le chef-d'oeuvre de David Lean, http://www.moncleroutletespain.com/ moncler, Lawrence d'Arabie, http://www.moncleroutletespain.com/ moncler españa, reste l'emblème d'une époque les années 1960 où le cinéma tentait de contrecarrer l'influence grandissante de la télévision en privilégiant la forme épique. Sa restauration permet de revoir le film dans des conditions exceptionnelles, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, en format blu-ray. Retrouvez cet article sur lemonde.frAnne Frank, http://www.moncleroutletespain.com/ moncler chaquetas, passion nipponeA Bruxelles, le trait vigoureux de PermekeLa belle pagaille de Skip & DieLouvre-Lens : la naissance d'un muséeCoup d'envoi de la Fête des lumières, à LyonInscrivez-vous aux newsletters du Monde, http://www.moncleroutletespain.com/ moncler online.frDevenez fan de Yahoo! Actu sur Facebook et suivez-nous sur Twitter, http://www.moncleroutletespain.com/ moncler outlet.Related articles:


    http://goodjobkih3115.tistory.com/archive/20120101?page=2 http://goodjobkih3115.tistory.com/archive/20120101?page=2

    http://only7115.tistory.com/830 http://only7115.tistory.com/830

Cache(캐시) 관련

DotNet 2010.12.23 14:14 |
1. DB Trigger 를 통한 캐시 expire : 디비 수정시 트리거를 통해 WCF 호출=> App Server 의 캐시 삭제.
http://www.devsource.com/c/a/Using-VS/Introducing-SQL-Server-2005s-CLR-Integration/

2. AOP Cache : http://cache.codeplex.com/
3. http://cascadeofinsights.com/post/1410736927/introducing-attribute-based-caching
4. http://aopcachingcomponents.codeplex.com/


가장 중요한 것은 1번에 대한 처리..
1. DB 사용자가 쿼리르로 데이터를 변경하는 경우가 없다면, 즉 데이터의 변경이 항상 Biz 를 통해 발생한다면,
    Biz 메소드의 업데이트 부분(Detete,Add 포함)에서 캐시를 날리면 됨(혹은 업데이트)
2. 만약 DB 에 직접 접속해서 쿼리를 수행하는 경우(DBA)를 고려한다면, 트리거를 이용하는 방법 뿐일듯.

SQL Cache InValidation(http://www.15seconds.com/issue/060330.htm)
을 사용하면 DB
Notification
을 보내주는 군요.

제가 필요하다고 생각했던 부분이 이미 제공되네요.

http://www.dotnetcurry.com/ShowArticle.aspx?ID=263&AspxAutoDetectCookieSupport=1

그렇다면, WCF
IIS
호스팅하면, ASP.NET 캐싱을 그대로 사용할 수 있지 않을까요?

http://msdn.microsoft.com/ko-kr/library/ee230443.aspx

가능하네요..^^




신고

'DotNet' 카테고리의 다른 글

PostSharp 을 이용한 PropertyChanged 이벤트 주입하기  (3) 2011.03.18
Cache(캐시) 관련  (0) 2010.12.23
리소스 사용하기(삽질기)  (1) 2010.05.24
[링크]AOP  (2) 2010.05.17
C# 4.0 에 추가된 기능들  (0) 2010.04.30
VS2010 beta2 동영상  (0) 2010.01.28

댓글을 달아 주세요


// Type T is declared covariant by using the out keyword.
public delegate T SampleGenericDelegate <out T>();

public static void Test()
{
    SampleGenericDelegate <String> dString = () => " ";

    // You can assign delegates to each other,
    // because the type T is declared covariant.
    SampleGenericDelegate <Object> dObject = dString;          
}


T앞에 out 키워드가 있음을 주목해야 한다. 암시적 형변환을 위해 out 이나 in 키워드를 꼭 써줘야 한다고 한다.
여기서는 스트링이 return 형이니까(파라미터가 아니라...) out  으로 한다.


아래코드는 out 키워드 없이 람다식으로 델리게이트 인스턴스를 만들수 있지만, 대리자간 서로 할당이 안된는 경우를 보여준다.

public delegate T SampleGenericDelegate<T>();

public static void Test()
{
    SampleGenericDelegate<String> dString = () => " ";

    // You can assign the dObject delegate
    // to the same lambda expression as dString delegate
    // because of the variance support for
    // matching method signatures with delegate types.
    SampleGenericDelegate<Object> dObject = () => " ";

    // The following statement generates a compiler error
    // because the generic type T is not marked as covariant.
    // SampleGenericDelegate <Object> dObject = dString;



}

위의 코드를 한참 쳐다 봤다.
이게 왠 암호인가...


public delegate T SampleGenericDelegate<T>();

델리게이트를 정의한다. T 는 제너릭을 뜻할 것이다. 즉 T 는 선언할때 결정되고 이 결정된 형식과 일치하는 시그니처를 갖는 메소드는 이 델리게이트가 다 대리자역할을 할 수 있다.



public string GetString()
{

   return "aaa";
}

라는 메소드가 있다면,

SampleGenericDelegate<String> dString  = GetString;

dString();

이렇게 쓸 수 있다.

그런데 뒤에 () => ""  이건 뭔가...
한 참 째려보니...람다식이다.
http://steelleg.tistory.com/entry/Lamda-Expression 이 글에서 한번 정리했던 건데....그동안 닷넷2.0만 하다보니
다 까먹었다.
=> 왼쪽이 입력 , 오른쪽이 출력 되겠다.
즉 입력 파라미터는 없고, 출력으로 " " 스트링을 내보내는 함수를 정의 한거다.


참고로 Action 과 Func 를 사용하는 경우도 링크해 둔다.
http://msdn.microsoft.com/ko-kr/library/dd465122.aspx
신고

'DotNet > C# 문법' 카테고리의 다른 글

Delegate Variance(대리자 가변성)  (0) 2010.06.29
Anonimous Function  (0) 2009.12.23
Lamda Expression - Func&Action  (0) 2009.12.23
Lamda Expression - Introduce  (0) 2009.12.23
checked & unchecked 키워드  (0) 2009.12.22

댓글을 달아 주세요

ICommad 구현하는 간단한 5가지 스텝.
출처 : http://johnpapa.net/silverlight/5-simple-steps-to-commanding-in-silverlight/

Step 1 – Implement ICommand

커멘드를 관리할 클래스를 하나 만들고 ICommand 인터페이스를 적용한다.
그러면 CanExecute,  Execute  함수와 CaneExecuteChanged event 가 만들어진다.

아래 코드를 카피해서 'AS-IS' 로 사용한다.

   1: public class DelegateCommand : ICommand
   2: {
   3:     Func<object, bool> canExecute;
   4:     Action<object> executeAction;
   5:     bool canExecuteCache;
   6:  
   7:     public DelegateCommand(Action<object> executeAction, Func<object, bool> canExecute)
   8:     {
   9:         this.executeAction = executeAction;
  10:         this.canExecute = canExecute;
  11:     }
  12:  
  13:     #region ICommand Members
  14:  
  15:     public bool CanExecute(object parameter)
  16:     {
  17:         bool temp = canExecute(parameter);
  18:  
  19:         if (canExecuteCache != temp)
  20:         {
  21:             canExecuteCache = temp;
  22:             if (CanExecuteChanged != null)
  23:             {
  24:                 CanExecuteChanged(this, new EventArgs());
  25:             }
  26:         }
  27:  
  28:         return canExecuteCache;
  29:     }
  30:  
  31:     public event EventHandler CanExecuteChanged;
  32:  
  33:     public void Execute(object parameter)
  34:     {
  35:         executeAction(parameter);
  36:     }
  37:  
  38:     #endregion
  39: }



Step 2 – Define the Command

ViewModel 클래스에 public ICommand 프로퍼티를 추가한다.

public ICommand LoadProductsCommand { get; set; }

Step 3 – Create the Command

ViewModel 생성자에 위에서 작성한 command 객체를 생성해서 프로퍼티에 셋하도록 작성한다.

LoadProductsCommand = new DelegateCommand(LoadProducts, CanLoadProducts);
여기서 LoadProducts, CanLoadProducts 메소드는 viewmodel 안에 정의된 메소드이다.

Step 4 – Create the VM
viewmodel 은 view 에서 접근가능해야 한다. 접근가능하게 하는 방법은 여러가지 이지만 간편한 방법으로 xaml 코드에 static resource 등록하는 방법이 있다. 아래코드에서 ProductViewModel 은 viewmodel 클래스다.

<UserControl.Resources>
    <local:ProductViewModel x:Key="vm"/>
</UserControl.Resources>


Step 5 – Bind the Command


<Button Content="Load" Width="120"
    Command="{Binding LoadProductsCommand}"
    CommandParameter="{Binding ElementName=FilterTextBox, Path=Text}" />


Command 프로퍼티에 ViewModel 에 정의한 command  속성을 반인딩한다.
command 에 파라미터를 전달하는 경우 위에서 처럼 CommandParameter 에 바인딩한다. 위의 예제에서는 텍스트박스의 입력값을 바인딩 햇다.

아래에는 viewmodel 코드들이다.

 

   1: public class ProductViewModel : ViewModelBase
   2: {
   3:     public ProductViewModel()
   4:     {
   5:         this.Products = new ObservableCollection<Product>();
   6:  
   7:         // Warning: DEMO CODE AHEAD
   8:         // Your ViewModel should not define your data for your Model :-)
   9:         // Instead, it could make a call to a service to get the data for the Model.
  10:         this.AllProducts = new ObservableCollection<Product>();
  11:         this.AllProducts.Add(new Product { ProductId = 1, ProductName = "Apple" });
  12:         this.AllProducts.Add(new Product { ProductId = 2, ProductName = "Orange" });
  13:         this.AllProducts.Add(new Product { ProductId = 3, ProductName = "Banana" });
  14:         this.AllProducts.Add(new Product { ProductId = 4, ProductName = "Pear" });
  15:         this.AllProducts.Add(new Product { ProductId = 5, ProductName = "Grape" });
  16:         this.AllProducts.Add(new Product { ProductId = 6, ProductName = "Grapefruit" });
  17:         this.AllProducts.Add(new Product { ProductId = 7, ProductName = "Strawberry" });
  18:         this.AllProducts.Add(new Product { ProductId = 8, ProductName = "Melon" });
  19:         this.AllProducts.Add(new Product { ProductId = 9, ProductName = "Guava" });
  20:         this.AllProducts.Add(new Product { ProductId = 10, ProductName = "Kiwi" });
  21:         this.AllProducts.Add(new Product { ProductId = 11, ProductName = "Pineapple" });
  22:         this.AllProducts.Add(new Product { ProductId = 12, ProductName = "Mango" });
  23:  
  24:         LoadProductsCommand = new DelegateCommand(LoadProducts, CanLoadProducts);
  25:     }
  26:  
  27:     private void LoadProducts(object param)
  28:     {
  29:         string filter = param as string ?? string.Empty;
  30:         this.Products.Clear();
  31:         var query = from p in this.AllProducts
  32:                     where p.ProductName.ToLower().StartsWith(filter.ToLower())
  33:                     select p;
  34:         foreach (var item in query)
  35:         {
  36:             this.Products.Add(item);
  37:         }
  38:     }
  39:  
  40:     private bool CanLoadProducts(object param)
  41:     {
  42:         return true;
  43:     }
  44:  
  45:     public ICommand LoadProductsCommand { get; set; }
  46:  
  47:     public ObservableCollection<Product> AllProducts { get; set; }
  48:  
  49:     private ObservableCollection<Product> products;
  50:     public ObservableCollection<Product> Products
  51:     {
  52:         get
  53:         {
  54:             return products;
  55:         }
  56:         set
  57:         {
  58:             products = value;
  59:             this.FirePropertyChanged("Product");
  60:         }
  61:     }
  62: }
  63:  



   1: public abstract class ViewModelBase : INotifyPropertyChanged
   2: {
   3:     public ViewModelBase()
   4:     {
   5:     }
   6:  
   7:     public event PropertyChangedEventHandler PropertyChanged;
   8:  
   9:     protected void FirePropertyChanged(string propertyname)
  10:     {
  11:         var handler = PropertyChanged;
  12:         if (handler != null)
  13:             handler(this, new PropertyChangedEventArgs(propertyname));
  14:     }
  15:  
  16: }

신고

'DotNet > silverlight' 카테고리의 다른 글

실버라이트에서 ICommand 사용하기  (0) 2010.06.29
View Model 간략 설명  (0) 2010.06.29

댓글을 달아 주세요

출처: http://openlightgroup.net/Blog/tabid/58/EntryId/89/Silverlight-View-Model-Style-An-Overly-Simplified-Explanation.aspx





왜 뷰모델을 사용하는가?

가장 큰 이유는 디자이너와 개발자간 협업시, 개발자는 ui 와 상관없이 개발을 할 수 있고, 디자이너는 개발자의 도움 없이 (개발 코드 없이, xaml 만으로..) ui 전체를 디자인 할 수 있다는 장점때문이다.

뮤모델의 장점들은 아래와 같다.
1. ui 개발을 직접 눈으로 보면서 개발할 수 있게 해줘서 ui 개발에 용이하다.(컴파일 해야 실행되는 ,코드 도움없이..)
2. 디자이너나 기획자 같은 비개발자들이 직접 ui를 만들어 낼 수 있어 보다 나은 ui 를 만들 수 있게 해준다.
3. 필요하다면 ui 만 먼저 쭉 만들고 테스트 해볼 수 있게 해준다.(개발 진행 없이..)
4. 개발자의 도움없이 ui 만 수정하는 것이 가능해진다.(코드와 ui 분리)


종합하자면, 뷰모델을 사용함으로써 ui 개발에서 c# 코드의 작성없이 xaml 로만 ui 개발이 가능하고 binding 과 command 를 통해 어플리케이션과 통신이 가능하다.


 Silverlight File Manager 같은 어플리케이션을 작성하는 경우,
개발자는 모델과 뷰모델만 작성하면 된다. view(ui) 는 디자이너는 몫이다. 개발자가 신경쓰지 않아도 된다.
디자이너의 경우 개발코드(c# 같은) 작성없이 ui 만 집중해서 만들면 된다. 이 ui 가 개발자에 의해 달라질 것을 걱정할 필요없다.작성하는 xaml 이 그대로 ui 로 쓰인다.

위의 언급한 어플리케이션은 아래와 같은 기능이 있다.
1. 폴더 리스트가 트리로 나온다.
2. 폴러를 선택하면 폴더의 내용을 볼 수 있다.
3. 선택한 파일을 다운로드 할 수 있다.


뷰모델 스타일을 사용해서 개발 과정을 살펴보자.

모델




모델은 어플리케이션에서 사용할 데이타가 전달되는 곳이다. 모델은 아래와 같은 것으로 구성될 수 있다.

1. web services : 서버와 통신을 통해 데이타를 가져오는 경우
2. Rest Services
3. Generic Collections : 로컬에서 정의한 데이타들

silverlight file manager 에서는 웹서비스를 사용하기로 한다.




뷰모델

뷰모델은 아래와 같은 것으로 구성된다.

1. 프로퍼티 : INotifyPropertyChanged 를 구현해서 다른 엘리먼트에 binding 되었다면, 그 값이 변경될때 만다 자동으로 알수있다.
2. collections : ObservableCollection 으로 다른 엘리먼트에 바인딩된 경우 그 값이 변경될때 마다 자동으로 알수있다.
3. Commands : 발생시킬 수 있는 일종의 이벤트. 또한 object 타잎의 파라미터 하나를 전달할 수 있다. 이 것은 ICommand 인터페이스를 구현하고 있다.

http://steelleg.tistory.com/entry/실버라이트에서-ICommand-사용하기 참고.




TreeView SelectedItemChanged  을 보면 폴더를 나열하는 트리뷰가 있고, 이 트리를 클릭하면 텍스트박스에 클릭한 폴더의 이름을 보여주는 예제가 있다.


이 예제에 나오는 ViewModel 을 고려해 보면,(화면의 데이타 모델을 그려본다.)
1. properties - 선택된 폴더의 이름을 갖고있을 string 이 하나 필요하다.
2. collections - 폴더의 컬렉션이 하나 필요하다.
3. commands - 커멘드는 파라미터로 폴더를 전달받고, 폴더 프로퍼티를 셋팅하는데 사용한다.


블렌드에서 View 의 DataContext > new 클릭! ViewModel 을 DataContext 에 셋팅한다.



  • PropertiesViewModelProperty (the selected folder)
  • CollectionsSilverlightFolders (the folders)
  • CommandsSetProductsCommand (that will be raised by the SelectedItemChanged event in the TreeView)



  • View


    뷰에서는 그냥 DataContext 창을 열고 드레그해서 페이지에 떨구면 이에 맞는 뷰컨트롤이 만들어진다.

    http://www.codeproject.com/KB/silverlight/RIATasks.aspx 하단부를 참고하길 바란다.


    An Outline

    • Model
    • ViewModel
      • Consists of:
        • Properties – One of something. This could be a String or an Object. Implements INotifyPropertyChanged, so that any element bound to it, is automatically notified whenever it changes.
        • Collections – A collection of something. This is of type ObservableCollection, so that any element bound to it, is automatically notified whenever it changes.
        • Commands – An event that can be raised. Also, one parameter of type Object can be passed. This implements ICommand. 
          • Implemented using Behaviors. Mostly the InvokeCommandAction Behavior  
    • View
      • Properties
        • Bind to a text box, radio button, toggle button, MediaElement, trigger an animation or ViewState change
      • Collections
        • Bind to List box, TreeMenu
      • Commands
        • Implemented using InvokeCommandAction behavior
          • Bind to a ICommand in the ViewModel
          • Indicate the ICommand that you want to raise
          • Drop on an element
            • Loaded
              • Used to “register” an element with the ViewModel. The ViewModel can attach event handlers, or store a reference to the element if needed.
            • Any other event
              • To simply trigger the behavior and raise the ICommand when needed, such as Click or mouseover
          • Pass a parameter
            • The parameter is type Object so it can be any UIElement

    신고

    'DotNet > silverlight' 카테고리의 다른 글

    실버라이트에서 ICommand 사용하기  (0) 2010.06.29
    View Model 간략 설명  (0) 2010.06.29

    댓글을 달아 주세요

    엔터프라이즈 라이브러리(EL)2.0 기반 프레임웍을 손보고있다.

    몇가지 이상하게 만들어진 부분과, 내 라이브러리를 추가해서 개발 패턴을 수립해 주는 것이 목적이다.

    빌딩블로 dll  각 하나씩을 참조해서 새로운 프레임웍을 만든것 같은데...이렇게하면 각 빌딩블록이 수정된 경우  수정된 dll 만 배포하면 되지만...빌딩블록자체를 수정해서 쓸일이 있을까...하나로 합치기로 했다.

    근데 문제가 발생했다.

    EL 소스코드를 한군대로 옮기고 컴파일을 시도했더니
    Properties.Resourcies 를 찾을 수 없다고 나온다.

    평소 리소스를 안쓰기에...이게 뭔소린가 했다.

    삽질이 시작된다.

    빌딩블록은 각자 Resources.resx 를 갖고있었다. 그곳에 static 값들(에러 메세지나 스트링포맷같은..)을 넣고 쓰고 있었다.

    그리고 코드에서

    using 프로젝트명.Properties; 를 추가하고

    Resources.리소스이름 ;

    이렇게 사용하고 있었다.
    자료를 찾아보니 리소스를 생성한경우 Properties.Resources 라는 static 프로퍼티로 쉽게 리소스에 접근하는 방법을 제공하고있었다.

    Replace 를 해서 using 프로젝트명.Properties; 이 부분을 모두 바꾸었다.

    오 그러나 엄청난 컴파일 오류들...ㅜㅜ

    한참만에.....원인을 찾았다
    프로젝트명중에 대문자 W 를 소문자 w 로 수정한 일이 있엇다.
    vs2005 에서 dll  명과 Resources.Designer.cs 에서 스트링으로 접근하는 dll  명은 대문자 W  인 상태에서 바뀌지 않았다.
    게다가 using 프로젝트명.Properties; 이 부분에 나오는 프로젝트명은 dll 이름이였다. 다른 프로젝트를 참조해서 리소스레 접근하는 경우 빌드할때 설정한 dll 명을  사용하면 된다.

    이런일이 발생하는 경우 프로젝트 속성정보와 Resources.Designer.cs 파일을 살펴봐야 한다.

    덕분에 하루가 금방 가버렸다.

    신고

    'DotNet' 카테고리의 다른 글

    PostSharp 을 이용한 PropertyChanged 이벤트 주입하기  (3) 2011.03.18
    Cache(캐시) 관련  (0) 2010.12.23
    리소스 사용하기(삽질기)  (1) 2010.05.24
    [링크]AOP  (2) 2010.05.17
    C# 4.0 에 추가된 기능들  (0) 2010.04.30
    VS2010 beta2 동영상  (0) 2010.01.28

    댓글을 달아 주세요

    1. Favicon of http://www.topluxwatch.com BlogIcon Tag Heuer Carrera 2011.07.18 11:36 신고 Address Modify/Delete Reply

      This article is really great, strong support

    [링크]AOP

    DotNet 2010.05.17 16:06 |
    http://enki.tistory.com/64
    이곳에 잘 정리되어있다.

    적용할 일이 있어서..잠시..
    신고

    'DotNet' 카테고리의 다른 글

    Cache(캐시) 관련  (0) 2010.12.23
    리소스 사용하기(삽질기)  (1) 2010.05.24
    [링크]AOP  (2) 2010.05.17
    C# 4.0 에 추가된 기능들  (0) 2010.04.30
    VS2010 beta2 동영상  (0) 2010.01.28
    Webdav 서버에 있는 오피스 파일 수정하기  (0) 2010.01.07

    댓글을 달아 주세요

    1. Favicon of http://conan77.tistory.com BlogIcon conan77 2010.05.18 10:30 신고 Address Modify/Delete Reply

      요즘 트위터는 안하나?

      • 무쇠다리 2010.05.19 08:49 신고 Address Modify/Delete

        트위터는 글이 너무 많이 올라와서..구글버디만 이따금 함.

    아래 링크에 소개되고 있다.
    http://www.c-sharpcorner.com/UploadFile/john_charles/984/

    점점 자바스크립트와 비슷해 진다...
    var 키워드를 쓰는 경우는 컴파일 타임에 형이 정해지는 반면 dynamic 인 경우는 런타임에 형이 결정된다는 점이 다른 듯 하다.
      즉 var 키워드를 쓰는 경우는 커파일시 오류가 검출되지만 dynamic 인 경우는 런타임시에 오류가 발견된다...더 위험하다..하지만 더 유연하다.
    아마도 함수형 언어도 닷넷프레임웍 랭귀지로 쓸수있께 하려고 추가한 기능인듯.
    앞으로 쓸일을 별로 없겠다.

    함수 파라미터에 기본값을 지정하는 기능은 좋은 것 같다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace CSharpNewFeatures
    {
        class Program
        {
            public static void Method(int age, String firstname="John", double salary=4000.99)
            { }
            static void Main(string[] args)
            {
                Method(30); //The same as Method(30,"John",4000.99)
                Method(30, "Mary"); //The same as Method(30,"Mary",4000.99)
                Method(30, "Mary", 2000.99);
            }
        }
    }



    이렇게 되면 오버로딩 코드를 여러개 안짜도 되지 않을까.

    게다가 파라미터 순서를 꼭 안지켜도 된다고한다.
    아래처럼..
    namespace CSharpNewFeatures
    {
        class Program
        {
            public static void Method(int age, String firstname="John", double salary=4000.99)
            { }
            static void Main(string[] args)
            {
                Method(30, salary:2000.9); //파라미터 매핑
            }
        }
    }

    이건 좋다...ㅎㅎ
    신고

    'DotNet' 카테고리의 다른 글

    리소스 사용하기(삽질기)  (1) 2010.05.24
    [링크]AOP  (2) 2010.05.17
    C# 4.0 에 추가된 기능들  (0) 2010.04.30
    VS2010 beta2 동영상  (0) 2010.01.28
    Webdav 서버에 있는 오피스 파일 수정하기  (0) 2010.01.07
    C# 에서 파일에 lock 걸기  (0) 2009.12.29

    댓글을 달아 주세요

    사이트 튜닝과 개발자들의 개발 편의성을 위해  새로운 script  태그(사용자 지정 컨트롤)을 하나 만들었다.

    시나리오대로 라면 expires 해더를 통해 스크립트가 브라우저 캐시가 되어야 하고 만료일 전까지는 Request를 보내지 않아야 한다.

    fiddler 로 조사해 보니 해더에 분명히 expires 해더가 붙었는데도...이 놈이 요청을 보낸다.
    브라우저의 캐시 폴더에 캐시가 저장되어있는데도 말이다....오 이런일이..왜 그런 것일까.

    혹시 몰라 우선 304 리턴 부분을 만들어 두었다. 브라우저 캐시가 안된다면 304 라도 처리해야 체면이 선다.

    Last-modified 해더와  Etag 도 설정해 봤는데 모두 같은 현상이다.
    304 처리는 잘 되지만 만료일일 지정된 놈이 계속 요청을 보낸다. 미치겠다.

    한가지 자료를 찾았다.
    http://weblogs.asp.net/scottgu/archive/2006/04/11/Don_1920_t-run-production-ASP.NET-Applications-with-debug_3D001D20_true_1D20_-enabled.aspx

    디버그 모드로 컴파일한 경우 axd  핸들러 내용이 캐시되지 않는다는 내용이 있다.
    클라이언트의 웹사이트는 왠지 모르지만 디버그 모드로 운영중이라고 한다.(ㅡㅡ;)
    나도 디버깅을 위해 디버깅상태로 테스트 햇으니 이게 유력한 용의자일까?
    닷넷 개발자들의 편의를 위해 디버그 모드인 경우 수정된 내용이 바로 적용되도록 캐시를 무시하도록 처리되었다고 한다.
    이제 debug=false 로 놓고 다시 테스트를 해본다.


    삽질이였다.

    테스트를 한다고 F5 키를 누르면서 한 것이 원인인듯 하다.
    http://www.ibm.com/developerworks/kr/library/wa-aj-cache/index.html
    이 자료를 보면 expires 가 설정된 경우라도 F5 를 누르면 IE는 요청을 보낸다.
    그렇기 때문에 304가 계속 나온것이다.

    F5 가 아닌 링크를 통해 페이지를 이동하는 경우 예상대로 요청을 보내지 않았다.
    긴 삽질이였다.



    신고

    댓글을 달아 주세요

    참고 : http://dotnetperls.com/cache-examples-aspnet

    Expires 해더와 Max-Age 해더와의 차이점은  Expires  가 절대 시간을 기준으로 한다면, Max-Age 는 요청의 들어오는 시간을 기준으로 설정된다는 개념의 차이다. 즉 기준시간이 다르다.
    만약 둘이 동시에 셋팅될 경우  Max-Age 가 Expires 시간을 무시한다. 즉 Max-Age 가 우선한다.

    신고

    댓글을 달아 주세요

    1. Server.MapPath

  • Server.MapPath(".") returns the current physical directory of the file (e.g. aspx) being executed
  • Server.MapPath("..") returns the parent directory
  • Server.MapPath("~") returns the physical path to the root of the application
  • Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application)

  • 2. Request 에서 경로 : http://www.west-wind.com/weblog/posts/132081.aspx

    Request Property Description and Value
    ApplicationPath Returns the web root-relative logical path to the virtual root of this app.
    /webstore/
    PhysicalApplicationPath Returns local file system path of the virtual root for this app.
    c:\inetpub\wwwroot\webstore
    PhysicalPath Returns the local file system path to the current script or path.
    c:\inetpub\wwwroot\webstore\admin\paths.aspx
    Path
    FilePath
    CurrentExecutionFilePath
    All of these return the full root relative logical path to the script page including path and scriptname. CurrentExcecutionFilePath will return the ‘current’ request path after a Transfer/Execute call while FilePath will always return the original request’s path.
    /webstore/admin/paths.aspx
    AppRelativeCurrentExecutionFilePath Returns an ASP.NET root relative virtual path to the script or path for the current request. If in  a Transfer/Execute call the transferred Path is returned.
    ~/admin/paths.aspx
    PathInfo Returns any extra path following the script name. If no extra path is provided returns the root-relative path (returns text in red below). string.Empty if no PathInfo is available.
    /webstore/admin/paths.aspx/ExtraPathInfo
    RawUrl Returns the full root relative URL including querystring and extra path as a string.
    /webstore/admin/paths.aspx?sku=wwhelp40
    Url Returns a fully qualified URL including querystring and extra path. Note this is a Uri instance rather than string.
    http://www.west-wind.com/webstore/admin/paths.aspx?sku=wwhelp40
    UrlReferrer The fully qualified URL of the page that sent the request. This is also a Uri instance and this value is null if the page was directly accessed by typing into the address bar or using an HttpClient based Referrer client Http header.
    http://www.west-wind.com/webstore/default.aspx?Info
    Control.TemplateSourceDirectory Returns the logical path to the folder of the page, master or user control on which it is called. This is useful if you need to know the path only to a Page or control from within the control. For non-file controls this returns the Page path.
    /webstore/admin/


    ResolveUrl 은 Page 에서만 사용가능하고 핸들러에서는 지원 안한다고 한다.
    즉 핸들러에서 처리할  url에 "~" 못 쓴다는 것인가..

    위의 내용외에 보다 많은 내용이 http://www.west-wind.com/weblog/posts/132081.aspx 에 언급되고 있다.

    신고

    댓글을 달아 주세요

    사용자 지정 컨트롤...말이 어렵다.

    사용자 정의 컨트롤은 흔히 유저컨트롤이라고 하는 것이고, 사용자 지정 컨트롤은 컨트롤을 하나 만드는 것이다.

    암튼...

    현재 튜닝 중이 사이트는 독립적으로 돌아가기도 하지만 다른 웹사이트의 한 카테고리로 동작되기도 한단다.
    그래서 이 사이트의 루트 경로가 가변적이다. 즉 ApplicationPath 가 어디서 사용되는지에 따라 틀리다는 것이다.

    그러다 보니 스크립트나 css 링크를 모두 스트링 조합으로 만들어내고 있었다.

    <%= "<script src=\"" + Request.ApplicationPath + "/image/common/js/link.js\" type=\"text/javascript\"></script>" %>

    이런 식으로...

    그러다 보니 가독성도 떨어지고, 페이지 코드가 엄청 지저분해보인다.
    aspx 파일은 태그로 모든게 정리되는 것이 좋을 것 같고, 로컬에서 개발시 어디서 이 사이트가 쓰이던지 개발자 고려하지 않아도 문제가 되지 않는 코딩을 찾아보기 시작했다.

    서버 사이드 컨트롤들은 기본적으로 "~" 심볼을 사용할 수 있다. ~ 로 현재 어플리케이션 패스를 자동으로 찾아준다.

    그렇다면 Link 태그나 Script 태그를 runat=server 로 지정하고 ~  로 쓰면 문제가 해결되지 않을까?

    Link 태그는 잘 동작한다.
    Script 태그는 안된다.

    아마도 script 에 runat=server 를 지정하면 그건 서버사이드 코드로 인식하기 때문일 것이다.

    그럼 새로운 script 태그를 하나 만들어 사용하면 해결될것이 아닌가?

    그래서 아래와 같은 사용자 지정 웹 컨트롤을 하나 만들었다.


    [DefaultProperty("Scr")]
        [ToolboxData("<{0}:Script runat=server></{0}:Script>")]
        public class Script : WebControl
        {

            private string src;

            private static string beginTag ="\n<script type='text/javascript' src='{0}'>";

            //[Bindable(true)] // vs 에서 데이터 바인딩 대화창을 표시할 것인지 여부
            [Category("Appearance")] //속성창에서 어떤 카테고리에 표시할 것인지
            [DefaultValue("")]
            [Localizable(true)] //속성을 지역화 할것인지
            public string Src
            {
                get
                {
                    return src;
                }

                set
                {
                    //if (value.StartsWith("~"))
                    //{
                    //    src = ResolveClientUrl(value);
                    //}
                    src = ResolveClientUrl(value);
                }
            }

            public override void RenderBeginTag(HtmlTextWriter writer)
            {
                writer.Write(string.Format(beginTag, src));
            }

            public override void RenderEndTag(HtmlTextWriter writer)
            {
                writer.Write("</script>\n");
            }
            //protected override void RenderContents(HtmlTextWriter output) //이거로 하면 앞뒤 span 태그가 붙는다.
            //{
            //    output.Write(string.Format(baseCode,src));
            //}
        }


    페이지 상단에
    <%@ Register TagPrefix="DL" Namespace="DINS.DDRD.Web.UI.Core.Page" Assembly="DINS.DDRD.Web.UI.Core" %>

    위 처럼 등록하고
    <DL:Script  runat="server" Src="~/image/common/js/link.js" />

    이렇게 사용한다.

    이렇게 해서 지저분한 코드를 좀 더 보기 좋게 개선했고, 개발자는 웹사이트가 어디에서 동작할 것인지 고민하지 않고 개발할 수 있게 해주었다.


    참고 : http://ondotnet.com/pub/a/dotnet/excerpt/progaspdotnet_14/index2.html?page=1

     

    신고

    댓글을 달아 주세요

    1. qq123456 2011.09.20 14:40 신고 Address Modify/Delete Reply

      The recession has affected the apparel market too http://www.montblancvendita.com/ vogue for the girl with lots of attitude. And so are the pops of neon. If
      with most of the women clothing within affordable http://www.comprarmontblanc.com/ you don't want to stand out but insist on a comfy look, then you can
      range. Dressing up for the party is possible with very http://www.montblancloja.com/ still wear the evergreen jeans with a jacket or a pullover to go with it.

    2. Favicon of http://louisvuittononline.judisells.com BlogIcon Vuittonurzq 2013.05.07 11:12 신고 Address Modify/Delete Reply

      http://louisvuittonshoes.judisells.com electrical power products which aren't suitable for both males and females. Propecia is one particualr treatment which may be safe for guys however,though shouldn't be used by the women. Minoxidil can be by both ladies and men. louis vuitton locations uk http://louisvuittonstore.judisells.com

    출처: http://www.i18nguy.com/markup/metatags.html


    Note the keywords "HTTP-EQUIV", "Name" and "Content" are case-insensitive. Their values are also case-insensitive.

    Tag Name Example(s) Description
    Author <META NAME="AUTHOR" CONTENT="Tex Texin"> The author's name.
    cache-control <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> HTTP 1.1. Allowed values = PUBLIC | PRIVATE | NO-CACHE | NO-STORE.
    Public - may be cached in public shared caches
    Private - may only be cached in private cache
    no-Cache - may not be cached
    no-Store - may be cached but not archived

    The directive CACHE-CONTROL:NO-CACHE indicates cached information should not be used and instead requests should be forwarded to the origin server. This directive has the same semantics as the PRAGMA:NO-CACHE.
    Clients SHOULD include both PRAGMA:NO-CACHE and CACHE-CONTROL:NO-CACHE when a no-cache request is sent to a server not known to be HTTP/1.1 compliant.
    Also see EXPIRES.
    Note: It may be better to specify cache commands in HTTP than in META statements, where they can influence more than the browser, but proxies and other intermediaries that may cache information.

    Content-Language <META HTTP-EQUIV="CONTENT-LANGUAGE"
    CONTENT="en-US,fr">
    Declares the primary natural language(s) of the document. May be used by search engines to categorize by language.
    CONTENT-TYPE <META HTTP-EQUIV="CONTENT-TYPE"
    CONTENT="text/html; charset=UTF-8">
    The HTTP content type may be extended to give the character set. It is recommended to always use this tag and to specify the charset.
    Copyright <META NAME="COPYRIGHT" CONTENT="&copy; 2004 Tex Texin"> A copyright statement.
    DESCRIPTION <META NAME="DESCRIPTION"
    CONTENT="...summary of web page...">
    The text can be used when printing a summary of the document. The text should not contain any formatting information. Used by some search engines to describe your document. Particularly important if your document has very little text, is a frameset, or has extensive scripts at the top.
    EXPIRES <META HTTP-EQUIV="EXPIRES"
    CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
    The date and time after which the document should be considered expired. An illegal EXPIRES date, e.g. "0", is interpreted as "now". Setting EXPIRES to 0 may thus be used to force a modification check at each visit.
    Web robots may delete expired documents from a search engine, or schedule a revisit.

    HTTP 1.1 (RFC 2068) specifies that all HTTP date/time stamps MUST be generated in Greenwich Mean Time (GMT) and in RFC 1123 format.
    RFC 1123 format = wkday "," SP date SP time SP "GMT"

    wkday = (Mon, Tue, Wed, Thu, Fri, Sat, Sun)
    date = 2DIGIT SP month SP 4DIGIT ; day month year (e.g., 02 Jun 1982)
    time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ; 00:00:00 - 23:59:59
    month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)

    Keywords <META NAME="KEYWORDS"
    CONTENT="sex, drugs, rock & roll">
    The keywords are used by some search engines to index your document in addition to words from the title and document body. Typically used for synonyms and alternates of title words. Consider adding frequent misspellings. e.g. heirarchy, hierarchy.
    PRAGMA NO-CACHE <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> This directive indicates cached information should not be used and instead requests should be forwarded to the origin server. This directive has the same semantics as the CACHE-CONTROL:NO-CACHE directive and is provided for backwards compatibility with HTTP/1.0.
    Clients SHOULD include both PRAGMA:NO-CACHE and CACHE-CONTROL:NO-CACHE when a no-cache request is sent to a server not known to be HTTP/1.1 compliant.
    HTTP/1.1 clients SHOULD NOT send the PRAGMA request-header. HTTP/1.1 caches SHOULD treat "PRAGMA:NO-CACHE" as if the client had sent "CACHE-CONTROL:NO-CACHE".
    Also see EXPIRES.
    Refresh <META HTTP-EQUIV="REFRESH"
    CONTENT="15;URL=http://www.I18nGuy.com/index.html">
    Specifies a delay in seconds before the browser automatically reloads the document. Optionally, specifies an alternative URL to load, making this command useful for redirecting browsers to other pages.
    ROBOTS <META NAME="ROBOTS" CONTENT="ALL">

    <META NAME="ROBOTS" CONTENT="INDEX,NOFOLLOW">

    <META NAME="ROBOTS" CONTENT="NOINDEX,FOLLOW">

    <META NAME="ROBOTS" CONTENT="NONE">
    CONTENT="ALL | NONE | NOINDEX | INDEX| NOFOLLOW | FOLLOW | NOARCHIVE"
    default = empty = "ALL"
    "NONE" = "NOINDEX, NOFOLLOW"

    The CONTENT field is a comma separated list:
    INDEX: search engine robots should include this page.
    FOLLOW: robots should follow links from this page to other pages.
    NOINDEX: links can be explored, although the page is not indexed.
    NOFOLLOW: the page can be indexed, but no links are explored.
    NONE: robots can ignore the page.
    NOARCHIVE: Google uses this to prevent archiving of the page. See http://www.google.com/bot.html

    GOOGLEBOT <META NAME="GOOGLEBOT" CONTENT="NOARCHIVE"> In addition to the ROBOTS META Command above, Google supports a GOOGLEBOT command. With it, you can tell Google that you do not want the page archived, but allow other search engines to do so. If you specify this command, Google will not save the page and the page will be unavailable via its cache.
    신고

    댓글을 달아 주세요

    1. qq123456 2011.09.20 14:39 신고 Address Modify/Delete Reply

      So what are the latest styles dominating the http://www.westwoodjewelrystore.com/ provides comfort to the lady. Well fitted clothes bring out the
      women clothing market? Women are mixing it up http://www.westwoodvarastoida.com/ personality of the woman and also include a bit of warmth .

    2. Favicon of http://www.moncleroutletespain.com/ BlogIcon moncler outlet 2013.01.04 17:04 신고 Address Modify/Delete Reply

      Remake de la série anglaise éponyme, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, Shameless est un programme osé, où les scènes de nu sont légion. A ce titre, http://www.moncleroutletespain.com/ moncler, l'excellent William H. Macy vient de confier une anecdote plut?t croustillante?au magazine?TheLos Angeles Times. En effet, l'acteur a partagé des séquences hot avec une fille dont il était le baby-sitter... Comme quoi, le passé nous rattrape toujours.L'heureuse élue n'est autre que Joan Cusack, http://www.moncleroutletespain.com/ moncler outlet, que William H. Macy gardait il fut un temps, ??Je connais Joan depuis un très long moment. En fait, je gardais Joan Cusack. Je commen?ais à être acteur à Chicago et je connaissais son père. Sa mère parle toujours de bibliothèques que j'ai construites et qui sont en face de sa porte, http://www.moncleroutletespain.com/ moncler españa.?? déclare le comédien. Du coup, le tournage n'a pas posé problème, la paire se connaissant comme cul et chemise, http://www.moncleroutletespain.com/ moncler online. Shameless débutera le 9 janvier prochain, sur la cha?ne Showtime, http://www.moncleroutletespain.com/ moncler chaquetas. News Colin Farrell dévasté après l'échec de Miami Vice News The Ward : un teaser pour le prochain CarpenterRelated articles:


      http://hyungsok7.tistory.com/27 http://hyungsok7.tistory.com/27

      http://bestvline.tistory.com/167 http://bestvline.tistory.com/167

    3. Favicon of http://www.moncleroutletespain.com/ BlogIcon moncler 2013.01.05 19:11 신고 Address Modify/Delete Reply

      Lors d'une rare visite mardi à Juba, la capitale du Sud-Soudan, http://www.moncleroutletespain.com/ moncler outlet, le président soudanais Omar el-Béchir a assuré qu'il célèbrerait le résultat du référendum de dimanche, même s'il débouchait sur la sécession, http://www.moncleroutletespain.com/ moncler chaquetas. "Je célèbrerai votre décision, http://www.moncleroutletespain.com/ moncler españa, même si vous choisissez la sécession", http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, a-t-il déclaré dans un discours prononcé devant de nombreux responsables sudistes et retransmis en direct sur la télévision d'Etat.Près de quatre millions de personnes (3, http://www.moncleroutletespain.com/ moncler online,75 millions au Sud, 116, http://www.moncleroutletespain.com/ moncler.000 au Nord et 60.000 à l'étranger) se sont inscrites sur les listes électorales en vue du référendum prévu du 9 au 15 janvier, aboutissement de l'accord de paix qui a mis fin à la guerre civile en 2005.Related articles:


      http://delijuice.tistory.com/53 http://delijuice.tistory.com/53

      http://citylock.tistory.com/42 http://citylock.tistory.com/42

    http://www.hanselman.com/blog/GettingSessionStateInHttpHandlersASHXFiles.aspx

    핸들러에서 세션값이 널로 나와서..왜 그런지 찾아봤다.
    이렇게 하면 된다고 한다.

    이유는 모른다..ㅎㅎ

    IReadOnlySessionState
    추가로 구현하뎐되다.

    http://weblogs.asp.net/ashicmahtab/archive/2008/09/18/how-to-use-session-values-in-an-httphandler.aspx

    여기에서 처럼  IRequiresSessionState fmf rngusgoeh 를 구현해도 된다.
    차이는 읽기만 할거냐 아니냐..
    dlrjf
    신고

    댓글을 달아 주세요

    1. Favicon of http://www.usbcustomer.com BlogIcon ousb 2011.01.20 16:45 신고 Address Modify/Delete Reply

      TheNvidai <a href="http://www.elec-products.com ">promotional usb flash drives</a> had answer the<a href="http://www.usbcustomer.com">custom usb flash drives</a>
      bound copy<a href="http://www.topusbdrive.com">branded usb flash drives</a>Polarized<a href="http://www.bestusbmemory.com">best usb flash drives</a>href="http://www.usb-disk.com">wholesale usb flash drives</a>matches <a href="<a href="http://www.topusbdrive.com/oem-usb-card-usb-drives-c-4_32.html">Card USB Drives </a>="http://www.cheapusbdisk.com">cheap usb flash drives</ahigh-end cartoon<a href="http://www.onlineusb.net">oem usb flash drives</a>href="http://www.onlineusb.net">oem usb</a>copy costs about <a href="http://www.onlineusb.net/plastic-usb-flash-drives-c-4.html">Plastic USB Flash Drives</a>Some <a href="http://www.onlineusb.net/metal-usb-flash-drives-c-7.html">Metal Usb Flash Drives</a>bad aftereffect <a href="http://www.onlineusb.net/swivel-usb-flash-drives-c-5.html">Swivel Usb Flash Drives</a><a href="http://www.onlineusb.net/pen-usb-flash-drives-c-12.htmlt">Pen Usb Flash Drives</a>no acclimation href="http://www.onlineusb.net/wooden-usb-flash-drives-c-6.html">Wooden Usb Flash Drives</a> system. So <a href="http://www.onlineusb.net/mini-thin-usb-flash-drives-c-11.html">Mini / Thin Usb Flash Drives</a> we shall not<a href="http://www.onlineusb.net/leather-usb-flash-drives-c-8.html">Leather Usb Flash Drives</a>abrasion the 3d<a href="http://www.onlineusb.net/credit-card-usb-flash-drives-c-9.html">Credit Card Usb Flash Drives</a><a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a> long, or we <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> may feel<a href="http://www.china-3dglasses.com">3d glasses</a> aching in our head.<a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a>We can seek <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> something about <a href="<a href="http://www.topusbdrive.com/oem-usb-leather-usb-drives-c-4_23.html">Leather USB Drives ="<a href="http://www.topusbdrive.com/oem-usb-pen-usb-drives-c-4_31.html">Pen USB Drives </a>="<a href="http://www.topusbdrive.com/brand-usb-sandisk-c-3_13.html>sandiskusb</a> ="<a href="http://www.topusbdrive.com/brand-usb-transcend-c-3_15.html>transcend usb</a>=index&cPath< href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a> The cast <a href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a>href="http://www.oemusb.org">oem usb</a>Glasses is actual nice. And we see abounding cinemas accept this brand, but it is too expensive. We can go to see Nvidai controlling shop, there are abounding bargain Abounding of them fit the amateur player. announcement approach of Nvidai is actual generally in PC and has absolutely acceptable effect. There is something appropriate in authoritative the Bracelet USB Drivess, such as the abnormality of colors. It is a stereoscopic imaging technology. Now we charge to mix some assorted colors together.

    2. qq123456 2011.09.20 14:35 신고 Address Modify/Delete Reply

      One of the best things that the Bratz http://www.solbrillerbillige.com/ Function. As we have said earlier, fashionable clothing
      apply when it comes to fashion is that they http://www.okularyprzeciwslonecznesklep.com/ should not only be stylish but also should serve its purpose. A
      do not just wear anything, even the latest fashion http://www.zonnebrilopteslaan.com/ good example would be why wearing faux fur on .

    VS2010 beta2 동영상

    DotNet 2010.01.28 17:35 |

    Visual Studio 2010에서의 Agile Development 적용 (코드 리뷰, 단위 테스트)
    Debugger Enhancements and Improvements inVisual Studio 2010
    신고

    댓글을 달아 주세요


    웹에서 오피스 파일을 열고 다시 저장하는 기술을 찾다가 알게 된것.

    1편 : http://www.onebigocean.com/index.php/2009/09/simple-webdav-part-1/
    webdav 서버 셋팅에 관한 글이다. 아파치에 대한 내용이라서 일단 패스..

    이글은 2편인 http://www.onebigocean.com/index.php/2009/09/simple-webdav-part-1/ 이 글을 참고한 것이다.

    참고로 http://www.webdavsystem.com 에서 괜찮은 닷넷 라이브러리를 판매한다.

    -------------------

    기본적으로 http get 요청으로 오피스 파일을 열면 read-only 상태로 열린다.
    그래서 수정이 된 내용을 저장 버튼을 통해 서버에 바로 반영할 수 없다.
    기존에는 로컬에 한번 저장한 후 서버에 업로드를 통해 업데이트를 하는 방법이 일반적이다.

    웹에서 오픈한 파일을 바로 수정해서 저장할 수 있는 방법을 찾아달라는 요청이 들어왔다.
    그래서 이것 저것 찾아보다가 나와 똑같은 이슈로 방법을 찾은 글을 찾았다. 재수!!!

    우선 webdave 서버를 구축하고 그 다음에 클라이언트에서 어떻게 자바스크립 호출로 read-wirte  상태로 파일을 열것인지를 고려해야 한다. 그리고 어떻게 서버에 업로드를 해서 파일을 업데이트 할 것이지 고민해야 한다.
    IIS 는 물론 대부분의 웹서버가 webdave 프로토콜을 지원하다. IIs 는 버젼마다 default 로 셋팅된 버전이 있고 취약성 문제로 disable 상태인 것도 있다. 이 부분은 언급하지 않으려고 한다. 왜냐하면 위도우 사용자 인증을 통해야 하기 때문인데(asp.net 폼인증과 Impersonation 을 통해 가능할지는 아직 모르겠다 -아마 가능할지도..) 내가 원하는 것은 회원가입한 모든 사용자에 대해 이 기능을 활성화 시켜야 하기에,  IIS기능에 탑재된  Webdav  서비스는 패스다.

    퇴근 시간이 되었으므로..내일 계속한다.

    신고

    댓글을 달아 주세요