Fasil Hayat's blog

...C#, .Net, Sharepoint, BizTalk, JQuery...

Jeg har lavet et lille simpelt eksempel, der viser brug af System.Runtime.Caching i .Net 4.0 framework. Eksemplet er lavet, da der kan være behov for caching udenfor ASP.Net applikationer, og undgåelse af brug af HttpRuntime.Cache. Principperne er de samme fra mit tidligere indlæg, dog har jeg introduceret en unik cachenøgle, man skal kalde caching som parameter.

Find eksemplet her.

   1:  /// <summary>
   2:  /// Varetager caching af objekter.
   3:  /// </summary>
   4:  public static class CachingHelper {
   5:      /// <summary>
   6:      /// Henter cached data.
   7:      /// </summary>
   8:      /// <typeparam name="T">Generisk format.</typeparam>
   9:      public static T GetCachedData<T>(string key){
  10:          var cache = MemoryCache.Default;
  11:          return cache[key] != null ? (T) cache[key] : default(T);
  12:      }
  13:      /// <summary>
  14:      /// Cacher data.
  15:      /// </summary>
  16:      /// <typeparam name="T">Generisk format.</typeparam>
  17:      public static T CacheData<T>(T o, string key){
  18:          var cache = MemoryCache.Default;
  19:          cache.Add(key, o, new CacheItemPolicy());
  20:          return o;
  21:      }
  22:      /// <summary>
  23:      /// Fjerner cachen.
  24:      /// </summary>
  25:      public static void ClearCache<T>(string key){
  26:          var cache = MemoryCache.Default;
  27:          if (cache.Contains(key) && (cache[key].GetType() == typeof(T)))
  28:          {
  29:              cache.Remove(key);
  30:          } 
  31:      }
  32:  }


'ClearCache' metoden sikrer at typen af det objekt, man vil fjerne fra cachen er valid ifht. nøglen, man sender med som parameter.
Der bør alligevel sættes en fornuftig CacheItemPolicy, hvor man kan definere, hvor længe cachen skal holde på et objekt.
Det kan fx. defineres på følgende måde, hvor der caches i ét minut:

   1:  /// <summary>
   2:  /// Cache politik, der definerer hvorlænge cachen skal holdes.
   3:  /// </summary>
   4:  private static readonly CacheItemPolicy CachePolitik = new CacheItemPolicy
   5:              {
   6:                  SlidingExpiration = new TimeSpan(0, 0, 1, 0)
   7:              };


Først skal IIS'en, der hoster Sharepoint 2010 sitet konfigureres for at WCF Services kommer til at fungere.

- Åbn IIS'en
- Find Sharepoint sitet og gå ind under 'Authentication'
- Sæt 'Anonymous Authentication' til disabled
- Sæt 'Basic Authentication' til enabled (hvis man sidder på en udviklerboks. Skal ellers være disabled).

Herefter laver man en Service reference til fx. 'http://MinBoks/sites/MitSite/_vti_bin/ListData.svc' i VS2010.
Man vil herefter få adgang til 'MitSiteDataContext', som skal benyttes for at få adgang til alle SP lister, der findes under 'MitSite'.

Man kan gøre brug af LINQ for at tilgå sharepoint 2010 lister på 'MitSite'. Inden da skal kontekst objekt sættes op. og Credentials skal sættes op. Bemærk kun credentials til en bruger, der har læse rettigheder til en SP 2010 liste, kan afvikle nedenstående kode.

   1:  var host = new Uri("http://MinBoks/sites/MitSite");
   2:  var kontekst = new MitSiteDataContext(new Uri
   3:              (string.Format("{0}/_vti_bin/ListData.svc", host)));
   4:  kontekst.Credentials = CredentialCache.DefaultCredentials;


LINQ udtryk der henter alle SPListItems fra 'MinSPListe' og danner en List<Artikel>:

   1:  var artikler = kontekst.MinSPListe.Where(
   2:                  p => p.Name == "John Doe").Select(p => new Artikel()
   3:                  {
   4:                      Title = p.Title,
   5:                      Id = p.Id,
   6:                      Kode = p.kode
   7:                  }).ToList();


Ved indhentning af et specifikt SPListItem:

   1:  var artikel = kontekst.MinSPListe.Where(
   2:                  p => p.Id == 5).Select(p => new Artikel()
   3:                  {
   4:                      Title = p.Title,
   5:                      Id = p.Id,
   6:                      Kode = p.kode,
   7:                      Name = p.Name,
   8:                      Path = p.Path
   9:                  }).FirstOrDefault();

 



aug
26

Password manager

af Fasil | Tags:

Udemærket password manager til administration af brugernavn og password:

Hent KeePass fra SourceForge her



Har man behov for at fjerne en låst fil hos en bruger eller et workspace (typisk hvis bruger ikke findes mere eller workspace er blevet slettet), skal følgende kommando køres i en VS cmd prompt:
tf undo /workspace:OtherUserWorkspace;OtherUser $/Project/File.cs /s:http://tfsserver:8080

Skal man slette et workitem:
witadmin destroywi /collection:CollectionURL /id:id [/noprompt]





   1:  private static List<Type> GetAllTypesFromDll(string dllName) {
   2:      var types = new List<Type>();
   3:      try {
   4:          var assembly = Assembly.LoadFrom(dllName);
   5:          Type[] allTypes = assembly.GetTypes();
   6:          types.AddRange(allTypes.Where(type => type.IsInterface));
   7:      } catch (Exception ex) {
   8:          Console.WriteLine("\n\nFejl - ikke valid dll. " + dllName);
   9:          Console.WriteLine("Exception\n" + ex.Message + "\n" + ex.InnerException);
  10:      }
  11:      return types;
  12:  }

   1:  private static IEnumerable<Service> ExtractPublicMethods(IEnumerable<Type> types) {
   2:      var exposedMethods = new List<Service>();
   3:      foreach (Type t in types) {
   4:          var service = new Service{ 
   5:                  Name = string.Format(t.Name.Remove(0, 1) + "{0}", ".svc"), 
   6:                  Operations = new List<string>() 
   7:          };
   8:          service.Operations = t.GetMethods(BindingFlags.Public | 
   9:              BindingFlags.DeclaredOnly | BindingFlags.Instance).
  10:              Select(a => a.Name).ToList();
  11:          exposedMethods.Add(service);
  12:      }         
  13:      return exposedMethods;
  14:  }

   1:  public class Service {
   2:      public List<string> Operations { get; set; }
   3:      public string Name { get; set; }
   4:  }


Fasil Malik Hayat

Developer
.Net, WCF, Sharepoint, MOSS, Biztalk, JQuery.

linkedin facebook twitter plaxo google+ grooveshark boxee
fasil

Education

fasil

Bachelor of Science (Honours)
De Montfort University, Leicester.

Fag: Java, MVC, Information Strategy, ITIL

Microsoft Certified Technology Specialist

Skills

.net vs2010 - C# sharepoint sql server jquery ubuntu java netbeans


  

Sign in