<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>wir-sin.org Blogs</title>
	
	<link>http://blogs.wir-sin.org</link>
	<description>Just another blogs.wir-sin.org weblog</description>
	<lastBuildDate>Sun, 08 Nov 2009 16:56:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Wir-sinorgBlogs" /><feedburner:info uri="wir-sinorgblogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Ein Einfaches Addin Framework</title>
		<link>http://feedproxy.google.com/~r/Wir-sinorgBlogs/~3/pJvh7hwubGY/</link>
		<comments>http://blogs.wir-sin.org/2009/11/08/ein-einfaches-addin-framework/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 16:02:58 +0000</pubDate>
		<dc:creator>Rene Windegger</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Reflection]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blogs.wir-sin.org/2009/11/08/ein-einfaches-addin-framework/</guid>
		<description><![CDATA[Dieser Post zeigt wie man ein Addin Framework effizient erstellen und verwenden kann.]]></description>
			<content:encoded><![CDATA[<!-- Easy AdSense V2.78 -->
<!-- Post[count: 1] -->
<div class="ezAdsense adsense adsense-leadin" style="float:right;margin:12px;"><script type="text/javascript"><!--
google_ad_client = "pub-6287593284592858";
/* blogs.wir-sin.org HalfBanner */
google_ad_slot = "9433180233";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Seit kurzem beschäftige ich mich etwas mit Reflection und möchte euch helfen ein paar Fehler zu vermeiden welche ich am Anfang gemacht habe. Darum werde ich ein Einfaches Addin Modul erstellen, welches es ermöglicht Addins dynamisch in eine Applikation zu laden.</p>
<h3>Der Code</h3>
<p>Es werden Mehrere Klassen in unterschiedlichen Assembly’s benötigt um die Funktionsweiße zu demonstrieren. Ich Fange mit den Zentralen Klassen des Frameworks an.</p>
<h4>Das Loader Assembly</h4>
<p>Wir benötigen ein Attribut welches uns mitteilt welche Klassen ein Addin sind, dazu definieren wir folgende Klasse:</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace org.wirsin.blogs.addinframework
{
    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
    public class AddinIdentifier : Attribute
    {
        private string className;
        public string ClassName
        {
            get
            {
                return className;
            }
            private set
            {
                className = value;
            }
        }

        public AddinIdentifier(string className)
        {
            this.className = className;
        }
    }
}</pre>
<p>Desweiteren benötigen wir eine Klasse welche das erzeugen einer neuen Addin Instanz übernehmen kann, und unter Umständen auch noch zusätzliche Informationen über die Addins zur Verfügung stellen kann. Diese Informationen sollten über Attribute zur Verfügung gestellt werden. Diese Klasse ist Generisch da wir ja wenn wir uns eine Instanz des Addins erzeugen lassen das Addin Interface als Rückgabewert erwarten.</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace org.wirsin.blogs.addinframework
{
    public class Addin
    {
        private Type addinType;
        public Addin(Type addinType)
        {
            this.addinType = addinType;
        }

        public AddinType Instance
        {
            get
            {
                return (AddinType)Activator.CreateInstance(addinType);
            }
        }
    }
}</pre>
<p>Die letzte Klasse welche im AddinFramework Assembly beheimatet ist ist der AddinLoader. Diese Klasse dient dazu Addins aus Assembly’s zu laden. Dies ist der “langsamste” Teil des Ladens da jäh nach Vorgehensweise mehrere Typen geladen werden müssen welche unter umständen später nicht mehr verwendet werden. Darum wurde für dieses Beispiel der Ansatz mit Assembly Attributen gewählt. Die Implementation sieht wie folgt aus:</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace org.wirsin.blogs.addinframework
{
    public class AddinLoader where PluginIdentifier : AddinIdentifier
    {
        private Type pluginIdentifier;
        private Type pluginType;

        private List&gt; addins = new List&gt;();
        public List&gt; Addins
        {
            get
            {
                return addins;
            }
            private set
            {
                addins = value;
            }
        }

        public AddinLoader()
        {
            pluginIdentifier = typeof(PluginIdentifier);
            pluginType = typeof(PluginType);
        }

        public void LoadAddinsFromFile(string fileName)
        {
            Assembly currentAssembly = Assembly.LoadFrom(fileName);
            LoadAddinsFromAssembly(currentAssembly);
        }

        public void LoadAddinsFromAssembly(Assembly assembly)
        {
            PluginIdentifier[] Attributes = (PluginIdentifier[])assembly.GetCustomAttributes(pluginIdentifier, false);
            foreach (PluginIdentifier i in Attributes)
            {
                addins.Add(new Addin(assembly.GetType(i.ClassName)));
            }
        }
    }
}</pre>
<p>Diese Klasse ist wiederum Generisch definiert. Dadurch ist es Möglich Addins zu laden welche nicht ausschließlich mittels des in diesem Assembly definierten AddinIdentifier geladen werden können sondern mittels Attributen versehen werden können welche von AddinIdentifier erben. Die Zentrale Methode und gleichzeitig auch die Methode mit dem höchsten Einsparungs potential ist die LoadAddinsFromAssembly Methode. Durch die Implementierung die gewählt wurde sind Teilweise riesige Einsparungsmöglichkeiten gegeben. Man könnte diese Methode auch Implementieren indem man jeden Typ im Assembly daraufhin überprüft ob er z.B.: ein spezielles Interface implementiert oder ob die Klasse mit einem Speziellen Attribut gekennzeichnet ist. Dies können in großen Assemblies mehrere Hundert Iterationen sein um festzustellen das nur ein Addin im Assembly definiert ist. Mit der hier implementieren Methode werden wirklich nur diese Typen aus dem Assembly geladen welche als Addin dienen.</p>
<h4>Der Client</h4>
<p>In unserer Implementierung ist der Client eine einfache Konsolen Application welche Addins verwendet um beliebigen Inhalt auf die Console zu schreiben.</p>
<!-- Easy AdSense V2.78 -->
<!-- Post[count: 2] -->
<div class="ezAdsense adsense adsense-midtext" style="float:left;margin:12px;"><script type="text/javascript"><!--
google_ad_client = "pub-6287593284592858";
/* blogs.wir-sin.org HalfBanner */
google_ad_slot = "9433180233";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Als erstes benötigen wir ein Interface welches ein Addin repräsentiert.</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace org.wirsin.blogs.addinframework
{
    public interface IAddin
    {
        void WriteSomething();
    }
}</pre>
<p>Und den Client welcher die AddinLoader Klasse verwendet um Addins aus einem Anderen Assembly nachzuladen.</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace org.wirsin.blogs.addinframework
{
    class Program
    {
        static void Main(string[] args)
        {
            AddinLoader loader = new AddinLoader();
            loader.LoadAddinsFromFile(&quot;Addins.dll&quot;);
            foreach (Addin i in loader.Addins)
            {
                i.Instance.WriteSomething();
            }
            Console.ReadLine();
        }
    }
}</pre>
<h4>Die Addins</h4>
<p>Alle Addins werden in einem Assembly definiert. Diese Definition kann auch gerne in mehreren Addins erfolgen. Die Iteration über den AddinFolder muss dann aber vom Client durchgeführt werden.</p>
<p>Nun zur Implementierung, In diesem Assembly benötigen wir eine Reference auf die Client Application und auf das AddinFramework Assembly. Wenn die Referenzen gesetzt sind implementieren wir folgende Klassen.</p>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

[assembly: org.wirsin.blogs.addinframework.AddinIdentifier(&quot;org.wirsin.blogs.addinframework.FirstAddin&quot;)]
namespace org.wirsin.blogs.addinframework
{
    public class FirstAddin : IAddin
    {
        #region IAddin Members

        public void WriteSomething()
        {
            Console.WriteLine(&quot;FirstAddin Loaded.&quot;);
        }

        #endregion
    }
}</pre>
<pre class="c-sharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

[assembly: org.wirsin.blogs.addinframework.AddinIdentifier(&quot;org.wirsin.blogs.addinframework.SecondAddin&quot;)]
namespace org.wirsin.blogs.addinframework
{
    public class SecondAddin : IAddin
    {
        #region IAddin Members

        public void WriteSomething()
        {
            Console.WriteLine(&quot;SecondAddin loaded&quot;);
        }

        #endregion
    }
}</pre>
<p>Beide Addins Implementieren das IAddin Interface und werden mittels eines Assembly Attribute als Addin Identifiziert.</p>
<h3>Die Demo</h3>
<p>Der Output des Clients sieht wie folgt aus. Auf die Reihenfolge in welcher die AddIns ausgeführt werden nehmen wir keinen Einfluss.</p>
<div id="attachment_42" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-42" src="http://blogs.wir-sin.org/files/2009/11/image-300x151.png" alt="Demo Application für den AddinLoader" width="300" height="151" /><p class="wp-caption-text">Demo Application für den AddinLoader</p></div>
<p>Solltet ihr noch fragen haben schreibt einfach einen Kommentar und lasst es mich wissen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/E2IzVRL9rOZfnsPBVwq3KNvi8ko/0/da"><img src="http://feedads.g.doubleclick.net/~a/E2IzVRL9rOZfnsPBVwq3KNvi8ko/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/E2IzVRL9rOZfnsPBVwq3KNvi8ko/1/da"><img src="http://feedads.g.doubleclick.net/~a/E2IzVRL9rOZfnsPBVwq3KNvi8ko/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=pJvh7hwubGY:nkRC1DeC41I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=pJvh7hwubGY:nkRC1DeC41I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=pJvh7hwubGY:nkRC1DeC41I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=pJvh7hwubGY:nkRC1DeC41I:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Wir-sinorgBlogs/~4/pJvh7hwubGY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.wir-sin.org/2009/11/08/ein-einfaches-addin-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.wir-sin.org/2009/11/08/ein-einfaches-addin-framework/</feedburner:origLink></item>
		<item>
		<title>Freundliche Assemblies und geheime Klassen</title>
		<link>http://feedproxy.google.com/~r/Wir-sinorgBlogs/~3/IKDf3Kq9144/</link>
		<comments>http://blogs.wir-sin.org/2009/09/02/freundliche-assemblies-und-geheime-klassen/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:23:00 +0000</pubDate>
		<dc:creator>Rene Windegger</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://blogs.wir-sin.org/?p=30</guid>
		<description><![CDATA[Kürzlich hatte ich die Anforderung eine Klasse mit einigen Members nur gewissen Assemblies zugänglich zu machen. Nach kurzem Nachdenken und einer schnellen Suche stellte sich heraus das dieses Unterfangen am einfachsten mit Friendly Assemblies zu bewerkstelligen ist. Bloß wie definiert man Friendly Assemblies und wie Verwendet man selbige? Genau das werde ich hier nun erklären. [...]]]></description>
			<content:encoded><![CDATA[<p>Kürzlich hatte ich die Anforderung eine Klasse mit einigen Members nur gewissen Assemblies zugänglich zu machen. Nach kurzem Nachdenken und einer schnellen Suche stellte sich heraus das dieses Unterfangen am einfachsten mit Friendly Assemblies zu bewerkstelligen ist.</p>
<p>Bloß wie definiert man Friendly Assemblies und wie Verwendet man selbige? Genau das werde ich hier nun erklären.</p>
<p>Ich starte mit einer Blank Solution um alle Schritte so genau wie Möglich zu beschreiben.</p>
<div id="attachment_31" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-31" src="http://blogs.wir-sin.org/files/2009/09/newProject-300x214.png" alt="Erstellen einer Empty Solution" width="300" height="214" /><p class="wp-caption-text">Erstellen einer Empty Solution</p></div>
<p>In dieser Solution legen wir nun 2 Projekte an zum einen das Assembly mit den geheimen Klassen und Membern und zum anderen das Assembly welches auf diese geheimen Klassen und Member zugreifen soll.</p>
<div id="attachment_32" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-32" src="http://blogs.wir-sin.org/files/2009/09/ClassLibrary-300x193.png" alt="Erstellen einer Class Library" width="300" height="193" /><p class="wp-caption-text">Erstellen einer Class Library</p></div>
<div id="attachment_33" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-33" src="http://blogs.wir-sin.org/files/2009/09/ConsoleApp-300x193.png" alt="Erstellen einer Console Application" width="300" height="193" /><p class="wp-caption-text">Erstellen einer Console Application</p></div>
<p>Als nächstes generiere ich ein KeyPair zum Signieren der Assemblies.</p>
<p>Dazu öffne ich einen Visual Studio 2008 Command Prompt und führe folgende Schritte aus.</p>
<div id="attachment_34" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-34" src="http://blogs.wir-sin.org/files/2009/09/CreateKeyPair-300x132.png" alt="Erstellen eines KeyPair zum Signieren von Assemblies" width="300" height="132" /><p class="wp-caption-text">Erstellen eines KeyPair zum Signieren von Assemblies</p></div>
<pre name="code">
sn -k MeinName.snk
sn -p MeinName.snk MeinName.Public.snk
sn -tp MeinName.Public.snk &gt; publickey.txt
</pre>
<p>Nun da ich ein KeyPair und einen daraus resultierenden Public Key habe kann ich beide Assemblies Signieren.</p>
<p>Wenn dies geschehen ist kann ich mich dem Implementieren einer geheimen Klasse zuwenden.</p>
<pre class="c-sharp" name="code">using System;

namespace SecretDemo
{
    internal class SecretDog
    {
        internal SecretDog()
        {
            Console.WriteLine("SecretDog created.");
        }

        internal void Bark()
        {
            Console.WriteLine("Bark...");
        }
    }
}</pre>
<p>Nun muss ich in meinem Assembly noch definieren wer seine Freunde sind. Dies geschieht über eine Direktive in der Datei AssemblyInfo.cs. Die Direktive lautet:</p>
<pre class="c-sharp" name="code">[assembly: InternalsVisibleTo("UserDemo, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e34a70830f261f8133ec72c3b49047f2a41970d2750b92aed7bb94daabe9883f88a736b1bef5ad7c4462776a9780e8a927a61c329249f0e0973463f134dc54cb1048e000d5a1ace7a9d97bd9e5cf5a3ced78edae726b5656b61ce4340214ceee2936838b73183909657bc7a56e17a8559b1869cd6d9497dbb7e6b12f4d96dcc7")]</pre>
<p>Diese Direktive folgt dem Schema „AssemblyName, PublicKey=PublicKey“. Den PublicKey entnimmt man der Textdatei welche im Zuge der Erstellung des KeyPairs entstanden ist. Da Dies nun geschehen ist kann ich diese Klasse in meiner UserDemo Assembly verwenden. Dazu füge ich eine Referenz auf das SecretDemo Projekt in das UserDemo Projekt ein und erstelle den Code der die Geheime Klasse verwendet.</p>
<pre class="c-sharp" name="code">using System;
using SecretDemo;

namespace UserDemo
{
    static class Program
    {
        static void Main(string[] args)
        {
            SecretDog dog = new SecretDog();
            dog.Bark();
            Console.ReadLine();
        }
    }
}</pre>
<p>Wenn alles gutgegangen ist sollte eine lauffähige Applikation entstanden sein welche den SecretDog verwenden kann. Und das Ergebnis sollte wie folgt aussehen.</p>
<div id="attachment_35" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-35" src="http://blogs.wir-sin.org/files/2009/09/DogDemo-300x153.png" alt="Laufende Demo Applikation welche die geheime Klasse SecretDog verwendet." width="300" height="153" /><p class="wp-caption-text">Laufende Demo Applikation welche die geheime Klasse SecretDog verwendet.</p></div>

<p><a href="http://feedads.g.doubleclick.net/~a/c2cnsJ7rsLLpOqfxjEtxb0fBYpY/0/da"><img src="http://feedads.g.doubleclick.net/~a/c2cnsJ7rsLLpOqfxjEtxb0fBYpY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/c2cnsJ7rsLLpOqfxjEtxb0fBYpY/1/da"><img src="http://feedads.g.doubleclick.net/~a/c2cnsJ7rsLLpOqfxjEtxb0fBYpY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=IKDf3Kq9144:iiLAghHO2s8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=IKDf3Kq9144:iiLAghHO2s8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=IKDf3Kq9144:iiLAghHO2s8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=IKDf3Kq9144:iiLAghHO2s8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Wir-sinorgBlogs/~4/IKDf3Kq9144" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.wir-sin.org/2009/09/02/freundliche-assemblies-und-geheime-klassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.wir-sin.org/2009/09/02/freundliche-assemblies-und-geheime-klassen/</feedburner:origLink></item>
		<item>
		<title>Sharepoint und WCF</title>
		<link>http://feedproxy.google.com/~r/Wir-sinorgBlogs/~3/RpIxGCSD28E/</link>
		<comments>http://blogs.wir-sin.org/2009/08/31/sharepoint-und-wcf/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 20:32:46 +0000</pubDate>
		<dc:creator>Rene Windegger</dc:creator>
				<category><![CDATA[MOSS 2007]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WSS 3.0]]></category>
		<category><![CDATA[AesCryptoServiceProvider]]></category>
		<category><![CDATA[ASP.Net Web Service]]></category>
		<category><![CDATA[PlatformNotSupportedException]]></category>

		<guid isPermaLink="false">http://blogs.wir-sin.org/?p=10</guid>
		<description><![CDATA[Kürzlich bin ich auf ein skurriles Problem mit einem ASP.Net Web Service in SharePoint gestoßen. Wir hatten ein ASP.Net Web Service entwickelt welches eine AES Verschlüsselung verwendet. Beim Aufruf des Web Service trat eine PlatformNotSupportedException auf. Nach einigen erfolglosen BugFixing versuchen hatte ich mich entschieden es mal mit WCF zu versuchen und siehe da alles [...]]]></description>
			<content:encoded><![CDATA[<p>Kürzlich bin ich auf ein skurriles Problem mit einem ASP.Net Web Service in SharePoint gestoßen.</p>
<p>Wir hatten ein ASP.Net Web Service entwickelt welches eine AES Verschlüsselung verwendet. Beim Aufruf des Web Service trat eine PlatformNotSupportedException auf. Nach einigen erfolglosen BugFixing versuchen hatte ich mich entschieden es mal mit WCF zu versuchen und siehe da alles läuft.</p>
<p>Das Deployment wird mittels Solution in den ISAPI Ordner von Sharepoint vorgenommen. Dazu wird ein Unterordner mit dem Namen _wcf erstellt und darunter dann die SVC Datei inklusive web.config abgelegt. Da MOSS 2007 nativ kein WCF unterstützt ist noch eine weitere Solution notwendig. Diese Solution enthält ein Web Application Feature welches einen Virtual Path Provider für WCF enthält. Also Solution installieren und Feature aktivieren und alles läuft.</p>
<p>Die Solution ist zu finden unter: <a href="http://www.codeplex.com/SPWCFSupport">http://www.codeplex.com/SPWCFSupport</a></p>
<p>Für weitere Infos zum Thema WCF und SharePoint ist noch folgender Blog Eintrag zu empfehlen: <a href="http://blah.winsmarts.com/2008-5-SharePoint_as_a_WCF_Host.aspx">http://blah.winsmarts.com/2008-5-SharePoint_as_a_WCF_Host.aspx</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/RwfGFyu3DzyPBBr0ohL482jN8K8/0/da"><img src="http://feedads.g.doubleclick.net/~a/RwfGFyu3DzyPBBr0ohL482jN8K8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RwfGFyu3DzyPBBr0ohL482jN8K8/1/da"><img src="http://feedads.g.doubleclick.net/~a/RwfGFyu3DzyPBBr0ohL482jN8K8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=RpIxGCSD28E:9a1dzrWDP98:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=RpIxGCSD28E:9a1dzrWDP98:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?i=RpIxGCSD28E:9a1dzrWDP98:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?a=RpIxGCSD28E:9a1dzrWDP98:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Wir-sinorgBlogs?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Wir-sinorgBlogs/~4/RpIxGCSD28E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.wir-sin.org/2009/08/31/sharepoint-und-wcf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.wir-sin.org/2009/08/31/sharepoint-und-wcf/</feedburner:origLink></item>
	</channel>
</rss>
