<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mostly Technical Content</title><link>http://blogs.msdn.com/mtcmuc/default.aspx</link><description>Das Team-Blog des Microsoft Technology Center in München</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Schnelleinstieg in die Windows 7 Entwicklung mit dem „Windows 7 Trainingskit“</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/07/08/schnelleinstieg-in-die-windows-7-entwicklung-mit-dem-windows-7-trainingskit.aspx</link><pubDate>Wed, 08 Jul 2009 11:22:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9823711</guid><dc:creator>gunnard</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9823711.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9823711</wfw:commentRss><description>&lt;p&gt;Windows 7 ist schon als Release Canditate verfügbar. Ein ganze Reihe von neue Funktionen steht mit Windows 7 bereit, die man in seine Anwendungen integrieren kann, um die Funktionalität und Windowsintegration zu erhöhen.&lt;/p&gt;  &lt;p&gt;Um hier schnell einen Einstieg zu bekommen, gibt es ein kostenloses Trainingskit – das “Windows 7 Trainingskit”. Herunterladen kann man das Kit von&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=12100526-ed26-476b-8e20-69662b8546c1&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=12100526-ed26-476b-8e20-69662b8546c1&amp;amp;displaylang=en&lt;/a&gt; .&lt;/p&gt;  &lt;p&gt;Im Trainingskit selbst kann man sich mit Presentationen einen Überblick aus Entwicklersicht über die neuen Windows 7 Features machen. Vorgestellt werden: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows 7 Overview&lt;/li&gt;    &lt;li&gt;Windows 7 Taskbar&lt;/li&gt;    &lt;li&gt;Windows 7 Libraries&lt;/li&gt;    &lt;li&gt;Windows 7 MultiTouch&lt;/li&gt;    &lt;li&gt;Windows 7 &lt;a name="Windows7SensorAndLocation"&gt;Sensor and Location Platform&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Windows 7 &lt;a name="Windows7Ribbon"&gt;Ribbon&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Windows 7 &lt;a name="Windows7BackgroundServices"&gt;Trigger Start Services&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Windows 7 Instrumentation&lt;/li&gt;    &lt;li&gt;Windows 7 &lt;a name="Windows7AppCompat"&gt;Windows 7 Application Compatability&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Wenn man Windows 7 RC, Visual Studio 2008 Sp1 und das Windows 7 SDK RC installiert, kann man auch mit HandsOn Labs praktisch die vorgestellten Features anprogrammieren. Die HandsOn Labs bestehen aus dem erklärenden PPT Slides zum Feature, einem Dokument das schrittweise die Programmierung erklärt und einer fertigen VisualStudio Lösung.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Viel Spass beim Ausprobieren … GunnarD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9823711" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>TECHED: TechEd Europe zum ersten Mal in Deutschland</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/06/22/teched-teched-europe-zum-ersten-mal-in-deutschland.aspx</link><pubDate>Mon, 22 Jun 2009 08:42:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9797277</guid><dc:creator>gunnard</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9797277.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9797277</wfw:commentRss><description>&lt;p&gt;Zum ersten Mal wird in diesem Jahr die TechEd Europe in Deutschland stattfinden. Die TechEd wird vom 9.-13. November in Berlin stattfinden. Die TechEd ist aus meiner Sicht die Veranstaltung, die man als .NET Entwickler, Windows Entwickler und IT Professional besuchen muss. &lt;/p&gt;  &lt;p&gt;Dieses Jahr gibt’s definitiv auch viel Neues da ja .NET 4.0, VisualStudio 10 und Windows 7 vor der Tür stehen.&lt;/p&gt;  &lt;p&gt;Ab heute, dem 22.06., kann man sich auf &lt;a href="http://www.microsoft.com/europe/teched/"&gt;http://www.microsoft.com/europe/teched/&lt;/a&gt; registrieren. Es gibt interessante Frühbucheroptionen.&lt;/p&gt;  &lt;p&gt;See you on TechEd … GunnarD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9797277" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/TechEd/default.aspx">TechEd</category></item><item><title>EntityFramework und POCO’s Neuigkeiten</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/06/04/entityframework-and-poco-s-neuigkeiten.aspx</link><pubDate>Thu, 04 Jun 2009 10:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9699087</guid><dc:creator>gunnard</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9699087.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9699087</wfw:commentRss><description>&lt;P&gt;In verschiedenen Einträgen in diesem Blog habe ich über die Verwendung von POCO’s mit dem Entityframework berichtet. In seinem Buch “Applying Domain-Driven Design and Patterns: (Pearson Education, Inc., 2006)”, Jimmy Nilsson definiert POCO’s als "…ordinary classes where you focus on the business problem at hand without adding stuff for infrastructure-related reasons. ... The classes should focus on the business problem at hand. Nothing else should be in the classes in the Domain Model."&lt;/P&gt;
&lt;P&gt;Mit der .NET Version 3.5 SP1 des Entityframeworks ist es nur indirekt möglich das Entityframework und POCO’s zu nutzen. In diesen Blog habe ich einige Möglichkeiten aufgezeigt, wie das aktuelle Entityframework und POCO’s zusammenarbeiten.&lt;/P&gt;
&lt;P&gt;Nun gibt es auf dem Teamblock des ADO.NET Teams eine Ankündigung, dass in der .NET Version 4.0 ein Entityframework enthalten sein wird, welches POCO’s unterstützt. Dazu sollte man den Artikel “Sneak Preview: Persistence Ignorance and POCO in Entity Framework 4.0” lesen --&amp;gt; &lt;A title=http://blogs.msdn.com/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-entity-framework-4-0.aspx href="http://blogs.msdn.com/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-entity-framework-4-0.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-entity-framework-4-0.aspx"&gt;http://blogs.msdn.com/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-entity-framework-4-0.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Im Artikel selbst äussert sich der Autor auch zu den Vorteilen von POCO’s: &lt;/P&gt;
&lt;P&gt;“… In Entity Framework 3.5 (.NET 3.5 SP1), there are more than a few restrictions that were imposed on entity classes. Entity classes in EF needed to either be sub classes of &lt;B&gt;EntityObject&lt;/B&gt;, or had to implement a set of interfaces we collectively refer to as IPOCO – i.e. &lt;B&gt;IEntityWithKey&lt;/B&gt;, &lt;B&gt;IEntityWithChangeTracker&lt;/B&gt; and &lt;B&gt;IEntityWithRelationships. &lt;/B&gt;These restrictions made it difficult if not downright impossible to build EF friendly domain classes that were truly independent of persistence concerns. It also meant that the testability of the domain classes was severely compromised. …”&lt;/P&gt;
&lt;P&gt;GunnarD&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9699087" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/.NET-Entwicklung/default.aspx">.NET-Entwicklung</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/POCO/default.aspx">POCO</category></item><item><title>SharePoint Webservices - oder wie ich CAML lieben lernte....</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/05/26/sharepoint-webservices-oder-wie-ich-caml-lieben-lernte.aspx</link><pubDate>Tue, 26 May 2009 11:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9641335</guid><dc:creator>svenm1</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9641335.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9641335</wfw:commentRss><description>&lt;P&gt;Die Verwendung der SharePoint Webservices (hier speziell dem Lists.asmx) ist hinreichend beschrieben (z.B. &lt;A href="http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems.aspx"&gt;hier&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Bei der Verwendung sind mir jedoch zwei Dinge aufgefallen die mir beim Entwickeln immer Zeit (und manchmal auch Nerven) kosten:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Wie sind die Feld/Spaltennamen die ich als FieldRef eintragen muss ? &lt;/LI&gt;
&lt;LI&gt;Wie sieht die Filterbedingung in CAML aus die ich verwenden muss ? &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Lösung: CAMLQueryBuilder&lt;/P&gt;
&lt;P&gt;Es gibt jedoch in den einschlägigen SharePoint Tools von U2U den &lt;A href="http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx" target=_blank mce_href="http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx"&gt;CAMLQueryBuilder&lt;/A&gt; der genau diese Probleme adressiert. Das Schöne an dem Tool ist dass man die Queries direkt auf Demo/Testdaten bauen kann und die Ergebnisse auch gleich auf Plausibilität überprüfbar sind.&lt;/P&gt;
&lt;P&gt;Wenn man diese Hürde genommen hat lassen sich Abfragen gegen den Lists.asmx zum Ermitteln der Listeneinträge recht komfortabel wie folgt erstellen:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;// Declare and initialize a variable for the Lists Web Service.&lt;/SPAN&gt;
server.Lists listService = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; server.Lists();
&lt;SPAN class=rem&gt;/* Authenticate the current user by passing their default&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;credentials to the Web Service from the system credential cache.*/&lt;/SPAN&gt;
listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
&lt;SPAN class=rem&gt;// Set the Url property of the service for the path to a subsite.&lt;/SPAN&gt;
listService.Url = &lt;SPAN class=str&gt;"http://server/_vti_bin/Lists.asmx"&lt;/SPAN&gt;;
&lt;SPAN class=rem&gt;// Instantiate an XmlDocument object&lt;/SPAN&gt;
System.Xml.XmlDocument xmlDoc = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; System.Xml.XmlDocument();
&lt;SPAN class=rem&gt;/* Assign values to the string parameters of the GetListItems method,&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;using GUIDs for the listName and viewName variables*/&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; listName = &lt;SPAN class=str&gt;"Contacts"&lt;/SPAN&gt;;
&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; rowLimit = &lt;SPAN class=str&gt;"150"&lt;/SPAN&gt;;

&lt;SPAN class=rem&gt;/*Use the CreateElement method of the document object to create elements&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;for the parameters that use XML*/&lt;/SPAN&gt;
System.Xml.XmlElement query = xmlDoc.CreateElement(&lt;SPAN class=str&gt;"Query"&lt;/SPAN&gt;);
System.Xml.XmlElement viewFields = xmlDoc.CreateElement(&lt;SPAN class=str&gt;"ViewFields"&lt;/SPAN&gt;);
System.Xml.XmlElement queryOptions = xmlDoc.CreateElement(&lt;SPAN class=str&gt;"QueryOptions"&lt;/SPAN&gt;);

&lt;SPAN class=rem&gt;/*To specify values for the parameter elements (optional), assign CAML fragments&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;to the InnerXml property of each element*/&lt;/SPAN&gt;
query.InnerXml = &lt;SPAN class=str&gt;"&amp;lt;Where&amp;gt;&amp;lt;Gt&amp;gt;&amp;lt;FieldRef Name=\"ID\" /&amp;gt;"&lt;/SPAN&gt; + &lt;SPAN class=str&gt;"&amp;lt;Value Type=\"Counter\"&amp;gt;3&amp;lt;/Value&amp;gt;&amp;lt;/Gt&amp;gt;&amp;lt;/Where&amp;gt;"&lt;/SPAN&gt;;
viewFields.InnerXml = &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name=\"Title\" /&amp;gt;"&lt;/SPAN&gt;;
            
viewFields.InnerXml=&lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='ID'/&amp;gt;&amp;lt;FieldRef Name='Title'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='FirstName'/&amp;gt;&amp;lt;FieldRef Name='FullName'/&amp;gt;"&lt;/SPAN&gt; +                                    
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='Email'/&amp;gt;&amp;lt;FieldRef Name='Company'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='JobTitle'/&amp;gt;&amp;lt;FieldRef Name='WorkPhone'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='HomePhone'/&amp;gt;&amp;lt;FieldRef Name='CellPhone'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='WorkFax'/&amp;gt;&amp;lt;FieldRef Name='WorkAddress'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='WorkCity'/&amp;gt;&amp;lt;FieldRef Name='WorkState'/&amp;gt;"&lt;/SPAN&gt; +
                    &lt;SPAN class=str&gt;"&amp;lt;FieldRef Name='WorkZip'/&amp;gt;&amp;lt;FieldRef Name='WorkCountry'/&amp;gt;"&lt;/SPAN&gt;;
                                    
            
    queryOptions.InnerXml = &lt;SPAN class=str&gt;""&lt;/SPAN&gt;;

&lt;SPAN class=rem&gt;/* Declare an XmlNode object and initialize it with the XML response from&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;the GetListItems method.*/&lt;/SPAN&gt;
System.Xml.XmlNode nodeListItems = listService.GetListItems(listName, &lt;SPAN class=str&gt;""&lt;/SPAN&gt;,query,viewFields,rowLimit,queryOptions);
&lt;SPAN class=rem&gt;// Loop through each node in the XML response and display each item.&lt;/SPAN&gt;
System.Data.DataSet  myds = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; DataSet(&lt;SPAN class=str&gt;"myds"&lt;/SPAN&gt;);
System.IO.StringReader xmlSR = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StringReader(nodeListItems.InnerXml);
myds.ReadXml (xmlSR);
&lt;SPAN class=rem&gt;//dataGrid1.DataSource=myds.Tables[1];&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
&lt;/P&gt;
&lt;P&gt;Viel Spass beim ausprobieren&lt;/P&gt;
&lt;P&gt;Sven 
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9641335" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint 2007 formularbasierte Authentifizierung (FBA) und Office ...</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/05/15/sharepoint-2007-formularbasierte-authentifizierung-fba-und-office.aspx</link><pubDate>Fri, 15 May 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9618204</guid><dc:creator>svenm1</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9618204.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9618204</wfw:commentRss><description>&lt;P&gt;diese Kombination hat mich bisher in den Wahnsinn getrieben, und der Versuch mit FBA aus Office heraus ein Dokument zu öffnen endete meist so:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA1_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA1_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=FBA1 src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA1_thumb.jpg" width=238 height=166 mce_src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA1_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Inzwischen geht das auch besser, und sieht so aus:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA3_2.png" mce_href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA3_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=FBA3 src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA3_thumb.png" width=316 height=107 mce_src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/SharePoint2007formularbasierteAuthentif_A5C5/FBA3_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Erreichen kann man das wesentlich bessere Verhalten von Office durch Einstellungen und Fixes - eine genaue Anleitung findet sich &lt;A href="http://blogs.msdn.com/sharepoint/archive/2009/05/13/update-on-sharepoint-forms-based-authentication-fba-and-office-client.aspx" target=_blank mce_href="http://blogs.msdn.com/sharepoint/archive/2009/05/13/update-on-sharepoint-forms-based-authentication-fba-and-office-client.aspx"&gt;hier&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Viel Spass beim Öffnen von Dokumenten&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Sven&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9618204" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>InfoPath 2007 Formulare - selbstlernende Felder</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/05/14/infopath-2007-formulare-selbstlernende-felder.aspx</link><pubDate>Thu, 14 May 2009 11:51:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9615725</guid><dc:creator>svenm1</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9615725.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9615725</wfw:commentRss><description>&lt;p&gt;In meinen Projekten bin ich neulich &amp;#252;ber eine Migration eines Lotus Notes Workflows gestolpert. Normalerweise benutzt man hier aus Gr&amp;#252;nden der Gestaltung Infopath 2007 Formulare um die Dateneingabe zu validieren.&lt;/p&gt;  &lt;p&gt;Jetzt bietet Notes ein sogenanntes selbstlernendes Feld (also eine Combobox die es erlaubt neue eigene Eintr&amp;#228;ge zu erstellen).&lt;/p&gt;  &lt;p&gt;Wenn man Infopath als Client verwendet ist das auch sehr einfach, dort ist eine Combobox als Control vorgesehen. Soll das ganze jetzt aber &amp;#252;ber die Infopath Forms Services laufen wird`s etwas schwieriger, denn die Combobox ist dort nicht verf&amp;#252;gbar.&lt;/p&gt;  &lt;p&gt;Abhilfe schafft hier ein eigenes kleines Control welches aus 3 Bausteinen besteht:&lt;/p&gt;  &lt;p&gt;Einer Textbox f&amp;#252;r die Eingabe, einem Button f&amp;#252;r die Steuerung sowie einer Listbox f&amp;#252;r die Anzeige bestehender Felder. Datenquelle ist hier eine SharePoint Liste. In unserem Fall soll ein Bearbeiter entweder aus der bestehenden Liste ausgew&amp;#228;hlt werden oder ein neuer Bearbeiter direkt eingegeben werden k&amp;#246;nnen - das Ganze ist nicht an irgendein Directory, sondern nur an eine einfache SharePoint Liste gebunden.&lt;/p&gt;  &lt;p&gt;Das Ganze sieht dann so aus:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/Combo1_2.jpg"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Combo1" src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/Combo1_thumb.jpg" width="485" height="30" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Die Idee dahinter ist die Combobox mit Regeln zu emulieren - d.h. folgende Aktionen hinter die Steuerelemente zu legen:&lt;/p&gt;  &lt;p&gt;Button: Blendet die Listbox ein/aus - dies wird &amp;#252;ber Regeln gesteuert&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/RulesBearbeiter_2.jpg"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="RulesBearbeiter" src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/RulesBearbeiter_thumb.jpg" width="356" height="180" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Textbox: nimmt die Eingabe auf, sonst ben&amp;#246;tigt diese Textbox keinerlei Regeln&lt;/p&gt;  &lt;p&gt;Listbox: Ist an die SharePoint Werteliste gebunden, beim Klick-Event wird der ausgew&amp;#228;hlte Eintrag in die Textbox kopiert, auch das geht &amp;#252;ber Regeln&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/RegelnBearbeiter_4.jpg"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="RegelnBearbeiter" src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/InfoPath2007FormulareselbstlernendeFelde_9865/RegelnBearbeiter_thumb_1.jpg" width="352" height="251" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Beim Speichern des Formulars wird gepr&amp;#252;ft ob der Eintrag schon in der Werteliste vorhanden ist und ggf. eingetragen.&lt;/p&gt;  &lt;p&gt;Hierzu kann man den Code in der Submit-Methode verwenden oder wie es hier gemacht wurde in einem nachgeschalteten SharePoint Workflow.&lt;/p&gt;  &lt;p&gt;Um die Daten aus dem Formular zu bekommen ist es sehr einfach dies zu deserialisieren und ein typisiertes .net Objekt in H&amp;#228;nden zu halten, Details hierzu sind &lt;a href="http://blogs.msdn.com/mtcmuc/archive/2009/05/14/infopath-2007-formualre-wie-komme-ich-an-die-daten-aus-c-ran.aspx"&gt;hier&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Viel Spass&lt;/p&gt;  &lt;p&gt;Sven&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9615725" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Infopath 2007 Formualre - wie komme ich an die Daten aus C# ran ?</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/05/14/infopath-2007-formualre-wie-komme-ich-an-die-daten-aus-c-ran.aspx</link><pubDate>Thu, 14 May 2009 11:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9615640</guid><dc:creator>svenm1</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9615640.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9615640</wfw:commentRss><description>&lt;P&gt;Jeder der mit SharePoint Workflows und Infopath 2007 Formularen zur Datenerfassung arbeitet weiss dass das XML welches die Daten enthält sehr komplex werden kann.&lt;/P&gt;
&lt;P&gt;Der XMLReader ist hier schnell überfordert, jedoch gibt es mit Hilfe des .net Framework Tools XSD eine schöne Alternative um an die Daten sehr komfortabel heranzukommen.&lt;/P&gt;
&lt;P&gt;Als Basis dient uns hier der XML Deserializer aus dem .net Framework - dieser muss jedoch mit einer Klasse gefüttert werden um zu funktionieren. Diese Klasse muss man jedoch nicht selbst schreiben sondern können diese aus dem Infopath-Formular generieren lassen. Dies geht wie folgt:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Das InfoPath Formular wie gewohnt speichern (zur Sicherheit)&lt;/LI&gt;
&lt;LI&gt;Danach nochmal ein "Save as Source", damit wird eine Datei myschema.xsd erzeugt.&lt;/LI&gt;
&lt;LI&gt;Aus dieser Datei wird mit XSD und die Schalter /CLASSES in eine myschema.cs erzeugt&lt;/LI&gt;
&lt;LI&gt;Diese CS Datei kann man jetzt in das Projekt einbinden.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Der Code für die Deserialisierung sieht dann so aus:&lt;/P&gt;&lt;PRE class=csharpcode&gt;XmlSerializer serializer = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XMLSerializer(&lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt;(MyFields));
xmlTextReader reader = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XMLTextReader(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; 
System.IO.StringReader(workflowProperties.InitiationData));
MyFields fields = serializer.Deserialize(reader);&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Ggf. ist MyFields noch durch den Namen der eigneen Classe in myschema.cs zu ersetzen.&lt;/P&gt;
&lt;P&gt;Happy Deserializing&lt;/P&gt;
&lt;P&gt;Sven&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9615640" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Software Strategy Summit Videos Online</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/05/06/software-strategy-summit-videos-online.aspx</link><pubDate>Wed, 06 May 2009 15:27:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9591414</guid><dc:creator>joergjo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9591414.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9591414</wfw:commentRss><description>&lt;p&gt;Mit dem „Software Strategy Summit“ fand am 24. April in Köln das aus Microsoft-Sicht in diesem Jahr wichtigste Strategie-Event für Softwarehersteller und System-Integratoren statt. Inzwischen sind jetzt auch im MSDN Event-Archiv die &lt;a href="http://www.microsoft.com/germany/msdn/events/s3/default.mspx"&gt;Video-Aufzeichnungen&lt;/a&gt; aller dort gehaltenen Vorträge abrufbar. Neben der bereits veröffentlichten Ansprache von Steve Ballmer sind mit dabei die Keynotes von MSDN Deutschland-Chef Dr. Said Zahedani und Bitkom-Vizepräsident Heinz Paul Bonn sowie insgesamt sieben Fachreferate, u.a. zu den Themen „Microsoft Software + Services Strategie, Windows Azure und die Azure Services Platform“, zur Microsoft Business Intelligence, zur neuen Windows Experience und zu den Office Business Applications.&lt;/p&gt;  &lt;p&gt;Aud dem MTC dabei: Unser Kollege Sven „SharePoint“ Maier, der natürlich über sein &lt;a href="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx"&gt;Lieblingsthema&lt;/a&gt; vortragen durfte. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9591414" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Software+Strategy+Summit/default.aspx">Software Strategy Summit</category></item><item><title>Vortrag bei der .NET User Group Braunschweig</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/23/vortrag-bei-der-net-user-group-braunschweig.aspx</link><pubDate>Thu, 23 Apr 2009 08:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9564273</guid><dc:creator>joergjo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9564273.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9564273</wfw:commentRss><description>&lt;p&gt;Vielen Dank für die rege Teilnahme letzten Dienstag! Code und Slide Deck sind auf meinem SkyDrive verfügbar oder über &lt;a title="Lars Kellers Blog" href="http://blog.lars-keller.net/"&gt;Lars Keller&lt;/a&gt; zu beziehen. Interessierte zum Thema Presentation Model (bzw. Model-View-ViewModel) sollten sich auch meine beiden Blogeinträge OOP Anmerkungen &lt;a href="http://blogs.msdn.com/mtcmuc/archive/2009/02/02/oop-2009-anmerkungen-teil-1.aspx"&gt;Teil 1&lt;/a&gt; und &lt;a href="http://blogs.msdn.com/mtcmuc/archive/2009/02/05/oop-2009-anmerkungen-teil-2.aspx"&gt;2&lt;/a&gt; anschauen.&lt;/p&gt;  &lt;p&gt;Bei dem Vortrag ist mir ein kleiner, aber peinlicher Fehler unterlaufen… ich habe vergessen, die letzte Folie mit den Links zu den Ressourcen rund um die Composite Application Guidance zu zeigen. Daher hier noch mal alle wichtigen Links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Composite Application Guidance Home Page auf CodePlex" href="http://www.codeplex.com/CompositeWPF"&gt;Composite Application Guidance Home Page auf CodePlex&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Composite Application Guidance Home Page in der MSDN Library" href="http://msdn.microsoft.com/en-us/library/cc707819.aspx"&gt;Composite Application Guidance Home Page in der MSDN Library&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="patterns &amp;amp; practices Developer Center auf MSDN" href="http://msdn.microsoft.com/en-us/practices/default.aspx"&gt;patterns &amp;amp; practices Developer Center auf MSDN&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-832fa331ebebd24c.skydrive.live.com/embedrowdetail.aspx/.Public/INETA%20UG%20Braunschweig/Slidedeck.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-832fa331ebebd24c.skydrive.live.com/embedrowdetail.aspx/.Public/INETA%20UG%20Braunschweig/Code.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Weiter geht’s am 14. Mai in Regensburg!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Jörg&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9564273" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/.NET-Entwicklung/default.aspx">.NET-Entwicklung</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Composite+Application+Library/default.aspx">Composite Application Library</category></item><item><title>SpicIE: New guidance – How to catch and handle Html events in managed Plug-In code</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/21/spicie-new-guidance-how-to-catch-and-handle-html-events-in-managed-plug-in-code.aspx</link><pubDate>Tue, 21 Apr 2009 09:11:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9558719</guid><dc:creator>gunnard</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9558719.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9558719</wfw:commentRss><description>&lt;p&gt;There is a new sample with the name HtmlEvents on the &lt;a href="http://code.msdn.microsoft.com/SpicIEContrib"&gt;http://code.msdn.microsoft.com/SpicIEContrib&lt;/a&gt; page. &lt;/p&gt;  &lt;p&gt;This sample demonstrates how your managed Plug-In code can register on Html events for specific Html elements. When the registered event is fired then your managed C# will be called.&lt;/p&gt;  &lt;p&gt;This mechanism could be helpful for the implementation of complex Plug-Ins.&lt;/p&gt;  &lt;p&gt;The sample consists of the sample code (Visual Studion 2008 project) and a HowTo guide which explains in 8 pages the base idea of the Plug-In.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;GunnarD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9558719" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/.NET-Entwicklung/default.aspx">.NET-Entwicklung</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Plug-In/default.aspx">Plug-In</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SpicIE/default.aspx">SpicIE</category></item><item><title>SpicIE: Deployment of a SpicIE based Plug-In</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/17/spicie-deployment-of-a-spicie-based-plug-in.aspx</link><pubDate>Fri, 17 Apr 2009 07:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9553960</guid><dc:creator>gunnard</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9553960.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9553960</wfw:commentRss><description>&lt;P&gt;After you have written a useful plug-in it comes the time when you have to deploy the plug-in on other computers But there may be some pitfalls during the deployment.&lt;/P&gt;
&lt;P&gt;First there is an “Install.bat” in your project which can be used for the plug-in registration. &lt;/P&gt;
&lt;P&gt;More difficult is the determination of assemblies which the plug-in depends on. You have to identify all necessary assemblies and must deploy these assemblies with your setup if they are not on the target computer.&lt;/P&gt;
&lt;P&gt;Important: SpicIE base framework depends on “Microsoft.mshtml.dll” and “Interop.SHDocVw.dll”.&lt;/P&gt;
&lt;P&gt;Both assemblies are part of the Visual Studio 2008 redistribuable file “C:\Program Files\Common Files\Merge Modules\vs90_piaredist.exe”. You can use this file to deploy these assemblies to a target computer.&lt;/P&gt;
&lt;P&gt;And finally ... Don't forget that you need a .NET framework on the target computer.&lt;/P&gt;
&lt;P&gt;GunnarD&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9553960" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Plug-In/default.aspx">Plug-In</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SpicIE/default.aspx">SpicIE</category></item><item><title>SpicIE: Reducing or switching off all diagnostic messages</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/14/spicie-reducing-or-switching-off-all-diagnostic-messages.aspx</link><pubDate>Tue, 14 Apr 2009 13:29:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9548521</guid><dc:creator>gunnard</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9548521.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9548521</wfw:commentRss><description>&lt;p&gt;The SpicIE framework uses the .NET System.Diagnostics.TraceSource class to output a lot of information during the runtime.&lt;/p&gt;  &lt;p&gt;During the development and debug process these messages could be really helpful to understand how the plugin works.&lt;/p&gt;  &lt;p&gt;But there are situations where you want to reduce or switch totally off these messages.&lt;/p&gt;  &lt;p&gt;With the following line of code you can switch off all trace messages from the Host.TraceSink property. If you want to do that, you can put the lines of code if the constructor of your own plug-in. &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#if&lt;/span&gt; !DEBUG
            Host.TraceSink.Listeners.Clear();
&lt;span class="preproc"&gt;#endif&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;If you want to reduce the number of output you can set a TraceSwitch to the Host.TraceSink.SourceSwitch property. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;Host.TraceSink.Switch = &lt;span class="kwrd"&gt;new&lt;/span&gt; SourceSwitch(&lt;span class="str"&gt;&amp;quot;ErrorSwitch&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Error&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;p&gt;By doing that you can control what messages will displayed. Following levels you can use to reduce the message output:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Error – see only error trace messages&lt;/li&gt;

  &lt;li&gt;Warning – see only error and warning trace messages&lt;/li&gt;

  &lt;li&gt;Information – see only error, warning and information trace messages &lt;/li&gt;

  &lt;li&gt;Verbose – see all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;GunnarD&lt;/font&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9548521" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Plug-In/default.aspx">Plug-In</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SpicIE/default.aspx">SpicIE</category></item><item><title>SpicIE: Understanding the browser extension creation model</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/09/spicie-understanding-the-browser-extension-creation-model.aspx</link><pubDate>Thu, 09 Apr 2009 08:12:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9539764</guid><dc:creator>gunnard</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9539764.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9539764</wfw:commentRss><description>&lt;p&gt;On the discussion part of the SpicIE home page (&lt;a href="http://code.msdn.microsoft.com/SpicIE/Thread/List.aspx"&gt;http://code.msdn.microsoft.com/SpicIE/Thread/List.aspx&lt;/a&gt;) I found an interesting question “Constructor is not called…”.&lt;/p&gt;  &lt;p&gt;The reason for this scenario is following. If you build IE extensions with SpicIE you finally constructs COM objects which Internet Explorer creates for you.&lt;/p&gt;  &lt;p&gt;In your code these classes seems to be normal objects. But from IE perspective this classes are COM objects which are created only once per IE process room. To understand how Internet Explorer 7/8 handles processes and tabs I recommend you this reading about “Loosely-coupled Internet Explorer Internet Explorer” --&amp;gt; &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=565"&gt;http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=565&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So in your own SpicIE code exists two categories of classes: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Internet Explorer extension classes &lt;/li&gt;    &lt;li&gt;Normal .NET classes&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The Internet Explorer extension classes have following characteristics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Any Internet Explorer extension class has a ProgID and a GUID &lt;/li&gt;    &lt;li&gt;Internet Explorer creates the COM object and the corresponding .NET class instance once for you &lt;/li&gt;    &lt;li&gt;To get access to the object instance you should use the “HostInstance” pattern&lt;/li&gt;    &lt;li&gt;You can’t control from your code at what time Internet Explorer creates your objects. This means for instance: it could happen that an invisible toolbar has no instance variable until he will be visualized&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here follows a short sample of the HostInstance pattern which could be used to access the Internet Explorer extension class instances.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HtmlTreeToolbar : SpicIE.Controls.Toolbar
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; HtmlTreeToolbar toolbarInstance;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Assignment of the instance in the object constructor:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; HtmlTreeToolbar()
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
&lt;span class="preproc"&gt;#if&lt;/span&gt; DEBUG
                Host.TraceSink.TraceInformation(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;HtmlTreeToolbar.HtmlTreeToolbar - DEBUG {0} - {1}&amp;quot;&lt;/span&gt;,
                    System.Reflection.Assembly.GetExecutingAssembly().FullName, DateTime.Now.TimeOfDay.ToString()));
&lt;span class="preproc"&gt;#else&lt;/span&gt;
                 Host.TraceSink.TraceInformation(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;HtmlTreeToolbar.HtmlTreeToolbar - RELEASE {0} - {1}&amp;quot;&lt;/span&gt;,
                    System.Reflection.Assembly.GetExecutingAssembly().FullName, DateTime.Now.TimeOfDay.ToString()));
&lt;span class="preproc"&gt;#endif&lt;/span&gt;

                toolbarInstance = &lt;span class="kwrd"&gt;this&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Finally usage of the instance variable to access functionality of the Internet Explorer extension class instance:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;void&lt;/span&gt; PageHtmlTree_OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; url)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (HtmlTreeToolbar.toolbarInstance != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                HtmlTreeToolbar.toolbarInstance.StartDisplayNewPageTree( (url!=&lt;span class="kwrd"&gt;null&lt;/span&gt;) ? url.ToString() : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty );   
            }
        }&lt;/pre&gt;

&lt;p&gt;GunnarD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9539764" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SpicIE/default.aspx">SpicIE</category></item><item><title>Bizarro Welt: ASP.NET MVC – PUT ist Kaputt</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/03/bizarro-welt-asp-net-mvc-put-ist-kaputt.aspx</link><pubDate>Fri, 03 Apr 2009 14:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9530691</guid><dc:creator>joergjo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9530691.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9530691</wfw:commentRss><description>&lt;P&gt;Jeder, der in seinem Leben einmal Software entwickelt hat, kam bestimmt irgendwann an einen Punkt, dass nach einer harmlosen Änderung im Quellcode, der Installation einer x-beliebigen Softwarekomponente oder dem Ändern eines Konfigurationsparameters, der sonst nie Seiteneffekte mit sich brachte, die Welt plötzlich Kopf steht: Anwendungen stürzen ab, Unit Test produzieren nur noch rote Balken oder auch nach mehrmaligen Redeployment mit offensichtlichen Änderungen à la &lt;CODE&gt;MessageBox.Show()&lt;/CODE&gt; verhält sich eine Anwendung stets identisch.&lt;/P&gt;
&lt;P&gt;Diese seltsamen Phänomene bezeichne ich als Probleme aus der &lt;A href="http://de.wikipedia.org/wiki/Bizarro" mce_href="http://de.wikipedia.org/wiki/Bizarro"&gt;Bizarro Welt&lt;/A&gt;. Ein Problem aus de Bizarro Welt weist einige interessante Eigenschaften auf:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Die Lösung (oder ein Workaround) für ein solches Problem ist vergleichsweise simpel zu realisieren. &lt;/LI&gt;
&lt;LI&gt;Die Erklärung der jeweiligen Ursache für ein solches Problem ist vergleichsweise kompliziert, so dass sie niemand wirklich Lust auf eine Erklärung hat (die Lösung ist ja simpel…). &lt;/LI&gt;
&lt;LI&gt;Eine Lösung oder ein Workaround für das Problem ist im Web nicht aufzuspüren – Live Search wie auch Google lassen den Suchenden ratlos zurück, weil man entweder gar nichts zu den anwendbaren Stichworten findet oder die Suchergebnisse nutzlos sind und im schlimmsten Fall sogar in die Irre führen. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Die letztgenannte Eigenschaft ist besonders tückisch, da viele Probleme aus der Bizarro Welt augenscheinlich Tausende von Entwicklern betreffen oder von den jeweiligen Technologie-Anbietern als Bugs/Issues/FAQ dokumentiert sein sollten – das ist zumindest immer mein erster Gedanke. &lt;/P&gt;
&lt;P&gt;Damit diese bemerkenswerte Gattung von technischen Problemenfällen endlich eine hinreichende Würdigung erhält, möchte ich eine Blog-Serie über (meine) Probleme aus Bizarro Welt starten. Den Auftakt macht dabei ein Problem, das ASP.NET MVC-Entwickler ereilen kann, die eine &lt;A title="ASP.NET MVC: Using RESTful Architecture" href="http://blog.wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture/" mce_href="http://blog.wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture/"&gt;RESTful Architektur&lt;/A&gt; verwenden wollen.&lt;/P&gt;
&lt;H3&gt;Das Phänomen&lt;/H3&gt;
&lt;P&gt;Gegeben ein RESTful entworfener Controller wie dieses Mini-Beispiel, dessen MVC-Anwendung &lt;EM&gt;unter IIS 7&lt;/EM&gt; läuft…&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; RestController : Controller&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;{&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; ActionResult CoreAction(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; id)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;        RestViewModel model = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; RestViewModel()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;            Id = id,&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;            Action = Request.HttpMethod.ToUpperInvariant()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;        };&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; Content(model.ToString());&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  14:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;// GET: /Rest/Get/1&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  15:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  16:  &lt;/SPAN&gt;    [AcceptVerbs(HttpVerbs.Get)]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  17:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; ActionResult Get(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; id)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  18:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  19:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; CoreAction(id);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  20:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  21:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  22:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  23:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;// POST: /Rest/Post/1&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  24:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  25:  &lt;/SPAN&gt;    [AcceptVerbs(HttpVerbs.Post)]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  26:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; ActionResult Post(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; id)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  27:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  28:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; CoreAction(id);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  29:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  30:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  31:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  32:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;// PUT: /Rest/Put/1&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  33:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  34:  &lt;/SPAN&gt;    [AcceptVerbs(HttpVerbs.Put)]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  35:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; ActionResult Put(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; id)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  36:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  37:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; CoreAction(id);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  38:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  39:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  40:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  41:  &lt;/SPAN&gt;    &lt;SPAN class=rem&gt;// DELETE: /Rest/Delete/1&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  42:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  43:  &lt;/SPAN&gt;    [AcceptVerbs(HttpVerbs.Delete)]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  44:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; ActionResult Delete(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; id)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  45:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  46:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; CoreAction(id);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  47:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  48:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;… warum fahren Clients, die PUT oder DELETE Requests senden, mit &lt;FONT color=#ff0000&gt;The remote server returned an error: (405) Method Not Allowed&lt;/FONT&gt; an die Wand? &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/BizarroWeltASP.NETMVCPUTistKaputt_CB52/405.png" mce_href="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/BizarroWeltASP.NETMVCPUTistKaputt_CB52/405.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=405 border=0 alt=405 src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/BizarroWeltASP.NETMVCPUTistKaputt_CB52/405_thumb.png" width=244 height=125 mce_src="http://blogs.msdn.com/blogfiles/mtcmuc/WindowsLiveWriter/BizarroWeltASP.NETMVCPUTistKaputt_CB52/405_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;An unserem Beispielcode kann es ja wohl kaum liegen, oder?&lt;/P&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;Die Lösung&lt;/H3&gt;
&lt;P&gt;In diesem Fall heißt der Schuldige &lt;A title="WebDAV auf IIS.NET" href="http://learn.iis.net/page.aspx/350/installing-and-configuring-webdav-on-iis-70/" mce_href="http://learn.iis.net/page.aspx/350/installing-and-configuring-webdav-on-iis-70/"&gt;WebDAV&lt;/A&gt;. Genauer gesagt ist es das WebDAV HTTP-Modul, das &lt;EM&gt;auch wenn das WebDAV-Feature selbst deaktiviert ist&lt;/EM&gt;, sich trotzdem alle PUT- und DELETE-Requests schnappt und überprüft. Wenn aber WebDAV nicht aktiviert ist, verwirft es PUT und DELETE, ohne dass unser Controller den Request zu sehen bekommt. &lt;/P&gt;
&lt;P&gt;Auch das Aktivieren des Feature ist hier nutzlos, da das Modul dann PUT und DELETE (vergeblich) zu verarbeiten versucht – wieder bleibt unser Controller bei der Request-Verarbeitung außen vor.&lt;/P&gt;
&lt;P&gt;Die Lösung in diesem Fall ist simpel: Das Modul muss in der Web.config der MVC-Applikation deaktiviert werden.&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;system.webServer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;validation&lt;/SPAN&gt; &lt;SPAN class=attr&gt;validateIntegratedModeConfiguration&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="false"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;modules&lt;/SPAN&gt; &lt;SPAN class=attr&gt;runAllManagedModulesForAllRequests&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;remove&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="WebDAVModule"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;      ...&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;modules&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;    ...&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;system.webServer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Der Effekt tritt übrigens sowohl bei Version 7.0 als auch 7.5 der WebDAV-Extension für IIS 7 auf. &lt;/P&gt;
&lt;P&gt;Und wer WebDAV gar nicht installiert hat? Ja, er oder sie sollte auch nicht auf dieses Problem stoßen – oder wurde Opfer eines ganz anderen Effekts aus der Bizarro Welt…&lt;/P&gt;
&lt;P&gt;Jörg&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9530691" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/WebDAV/default.aspx">WebDAV</category><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/IIS+7/default.aspx">IIS 7</category></item><item><title>SpicIE: “SpicIEContrib” project opened at http://code.msdn.microsoft.com/SpicIEContrib</title><link>http://blogs.msdn.com/mtcmuc/archive/2009/04/01/spicie-spiciecontrib-project-opened-at-http-code-msdn-microsoft-com-spiciecontrib.aspx</link><pubDate>Wed, 01 Apr 2009 07:43:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9525678</guid><dc:creator>gunnard</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mtcmuc/comments/9525678.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mtcmuc/commentrss.aspx?PostID=9525678</wfw:commentRss><description>&lt;p&gt;There is a new project at &lt;a href="http://code.msdn.microsoft.com/SpicIEContrib"&gt;http://code.msdn.microsoft.com/SpicIEContrib&lt;/a&gt;. This project hosts HowTo Samples, Code, Guidance, … related to the SpicIE Framework&lt;/p&gt;  &lt;p&gt;If you actually start using SpicIE you should have a look at the Samples.&lt;/p&gt;  &lt;p&gt;Regards … GunnarD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9525678" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mtcmuc/archive/tags/SpicIE/default.aspx">SpicIE</category></item></channel></rss>