<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Codehauerei Schwarz &#187; C#</title>
	<atom:link href="http://codehauerei-schwarz.de/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codehauerei-schwarz.de</link>
	<description>.NET SQL-Server &#38; more</description>
	<lastBuildDate>Mon, 28 Mar 2011 08:38:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Emails per IMAP abfragen</title>
		<link>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/</link>
		<comments>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 16:02:50 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[EMail]]></category>
		<category><![CDATA[IMAP]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=237</guid>
		<description><![CDATA[Ein kleines Beispielprojekt um Emails per IMAP abzurufen IMAP_Sample Update: Jetzt auch mit SSL-Unterstützung&#8230;]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Beispielprojekt um Emails per IMAP abzurufen</p>
<p><a href='http://codehauerei-schwarz.de/wp-content/uploads/2011/03/IMAP_Sample.rar'>IMAP_Sample</a></p>
<p>Update: Jetzt auch mit SSL-Unterstützung&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SqlParameter.Add() vs AddWithValue()</title>
		<link>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/</link>
		<comments>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 18:33:05 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=209</guid>
		<description><![CDATA[Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben. Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest. using (var conn = new SqlConnection(@"ConnectionString zensiert")) { conn.Open();      string sql = "Select LastName FROM TestTable WHERE [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"></a>Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben.</p>
<p>Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest.</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

      cmd.Parameters.AddWithValue("@l", "Harglgargl");
       //selbes Ergebnis
       //cmd.Parameters.Add("@l", "Meier");

       object res = cmd.ExecuteScalar();
}</pre>
<p>Ich würde erwarten, dass der SQL-Server schlau genug wäre und den Parameter korrekt auflöst.</p>
<p>Leider gibt es hier ein kleines Problem.</p>
<p>Führt man das Codefragment mit den Werten &#8220;Huber&#8221;, &#8220;Schmidt&#8221;, und &#8220;Harglgargl&#8221; aus würde man erwarten,</p>
<p>dass der SQL-Server einen bereits vorhandenen Ausführungsplan benutzt bzw. einen Plan für diese Abfrage erstellt und dann wiederverwendet.</p>
<p>Das Resultat sieht leider etwas anders aus:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png"><img class="alignnone size-full wp-image-213" title="SqlParameter_AddWithValue_1" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png" alt="Cached Plans" width="573" height="306" /></a></p>
<p>Für jede Varchar-Länge wird ein eigener Ausführungsplan angelegt.</p>
<p>Die Auswirkungen werden bei einem genaueren Blick auf die Speicherausnutzung des SQL-Servers deutlich.</p>
<p>Mein Dev-Server sagt dazu auf jeden Fall Folgendes:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png"><img class="alignnone size-full wp-image-215" title="SqlParameter_AddWithValue_2" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png" alt="" width="182" height="76" /></a></p>
<p>Cached: verwendeter Speicher um Seiten zu cachen</p>
<p>Stolen: Speicher der &#8220;gestohlen&#8221; wird um Ausführungspläne zu cachen</p>
<p>Das Verhältnis wird in den meisten Szenarien vernachlässigbar sein. Ich kann mir allerdings einige Umgebungen vorstellen in denen das Ganze zum Problem werden könnte.</p>
<p>Wie dem auch sei. Je mehr Speicher zur Verfügung steht um Seiten zu cachen umso besser <img src='http://codehauerei-schwarz.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Die Lösung des Ganzen ist aktuell leider etwas umständlich. Man kann das Ganze umgehen indem man den Datentyp der entsprechenden Datenbankspalte angibt.</p>
<p>Leider ist das Ganze extrem lästig da es aktuell keine brauchbare Überladung gibt (Man kann sich natürlich eine schnitzen)&#8230;</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

     SqlParameter p = new SqlParameter("@l", System.Data.SqlDbType.VarChar, 1000);
     p.Value = "Huber";

     cmd.Parameters.Add(p);

     object res = cmd.ExecuteScalar();
}</pre>
<p> </p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"><img class="alignnone size-full wp-image-218" title="SqlParameter_AddWithValue_3" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png" alt="" width="522" height="58" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom WCF Username/Password Validator mit wsHttpBinding</title>
		<link>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/</link>
		<comments>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 12:53:41 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=175</guid>
		<description><![CDATA[... namespace WCFTestService.Auth { public class CustomUserNamePasswordValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { // check credentials here... ... Config: ... ... ... ...]]></description>
			<content:encoded><![CDATA[<pre class="brush:[c#]">
...
namespace WCFTestService.Auth
{
    public class CustomUserNamePasswordValidator : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
               // check credentials here...
...
</pre>
<p>Config:</p>
<pre class="brush:[xml]">
<system.serviceModel>
...
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpWithMessageSecurity">
          ...
          <security mode="Message">
<transport clientCredentialType="Basic">
              <extendedProtectionPolicy policyEnforcement="Never" />
            </transport>
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CustomSecurityTest">
          <serviceCredentials>
            <serviceCertificate findValue="zensiert"
              storeLocation="zensiert" storeName="zensiert" x509FindType="FindBySerialNumber" />
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="WCFTestService.Auth.CustomUserNamePasswordValidator, WCFTestService" />
          </serviceCredentials>
          ...
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="CustomSecurityTest" name="ServiceTestConfig">
        <endpoint address="zensiert"
          binding="wsHttpBinding"
          bindingConfiguration="wsHttpWithMessageSecurity" name="wstHttpCustomSecurityTest"
          contract="WCFTestService.ITest" />
      </service>
    </services>
    ...
</system.serviceModel>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webservice Traces mit WSE 2.0</title>
		<link>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/</link>
		<comments>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 12:53:58 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[WebService]]></category>
		<category><![CDATA[WSE]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=42</guid>
		<description><![CDATA[WSE 2.0 Trace Sample Auch wenn in der Webservice-Entwicklung mittlerweile größtenteils das WCF-Framework eingesetzt wird, haben wir alle bestimmt noch die eine oder andere &#8220;ältere&#8221; Anwendung zu betreuen. Tritt ein Bug auf, schadet es nie zuerst einen Blick auf die entsprechenden Daten zu werfen. Während das Ganze im WCF-Framework mit einigen Mausklicks erledigt ist oder [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/10/WSE-2.0-Trace-Sample.rar">WSE 2.0 Trace Sample</a></p>
<p>Auch wenn in der Webservice-Entwicklung mittlerweile größtenteils das WCF-Framework eingesetzt wird, haben wir alle bestimmt noch die eine oder andere &#8220;ältere&#8221; Anwendung zu betreuen.</p>
<p>Tritt ein Bug auf, schadet es nie zuerst einen Blick auf die entsprechenden Daten zu werfen. Während das Ganze im WCF-Framework mit einigen Mausklicks erledigt ist oder man nicht sowieso ein asychrones Traceing aufgesetzt hat ist bei den Web Service Enhancements ein wenig mehr zu tun.</p>
<p><strong>Das Ganze ist allerdings mit Vorsicht zu genießen und sollte auf Produktiv-Systemen relativ zügig wieder deaktiviert werden da die entsprechenden Dateien relativ schnell anwachsen&#8230;</strong></p>
<p>- Referenz auf die entsprechende WSE Assembly einfügen</p>
<p>- Die Vererbung der generierten Client-Klasse anpassen</p>
<p>Reference.cs</p>
<pre class="brush:[c#]">public partial class GlobalWeather : Microsoft.Web.Services2.WebServicesClientProtocol</pre>
<p> - App.config der Anwendung erweitern</p>
<pre class="brush:[xml]">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;configuration&gt;
    &lt;configSections&gt;
 ...
      &lt;section name="microsoft.web.services2" type="Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&gt;
    &lt;/configSections&gt;
 ...
  &lt;microsoft.web.services2&gt;
    &lt;diagnostics&gt;
      &lt;trace enabled="true"
        input="inputTrace.webinfo"
        output="outputTrace.webinfo"/&gt;
    &lt;/diagnostics&gt;
  &lt;/microsoft.web.services2&gt;
&lt;/configuration&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

