<?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>ShawnMeyer.com</title>
	<atom:link href="http://shawnmeyer.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shawnmeyer.com</link>
	<description></description>
	<lastBuildDate>Thu, 17 Mar 2011 20:51:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Don’t Just Say You’re Doing Code Reviews</title>
		<link>http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 20:22:19 +0000</pubDate>
		<dc:creator>Shawn Meyer</dc:creator>
				<category><![CDATA[Code Quality]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Code Reviews]]></category>

		<guid isPermaLink="false">http://shawnmeyer.com/?p=118</guid>
		<description><![CDATA[I keep hearing how wonderful code reviews are to help improve the quality of code.  There is a lot of information about how code reviews can improve code design, reduce defects, and share knowledge.  I have participated in a number of code reviews, and I can definitely say they have the potential to be a powerful tool.  My problem with code reviews is not the concept, but the follow through. <a href="http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/">Don’t Just Say You’re Doing Code Reviews</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I keep hearing how wonderful code reviews are to help improve the quality of code.  There is a lot of information about how code reviews can improve code design, reduce defects, and share knowledge.  I have participated in a number of code reviews, and I can definitely say they have the potential to be a powerful tool.  My problem with code reviews is not the concept, but the follow through.</p>
<p>I think it can be really easy to implement a code review process, but ultimately it takes discipline to make the process effective.  Like any good idea it is all about execution.  I believe there is a reason some are seeing true benefits from a code review while others are seeing very little in return.</p>
<p>Below are two lists of responsibilities for both the developer and the reviewer.  Of course this is not a list to end all lists, but it is definitely a sound starting point.  If your team can be disciplined to execute on these responsibilities you should start seeing consistent return from your code reviews.</p>
<p>Responsibilities of the reviewer:</p>
<ol>
<li>evaluate the code and not the developer</li>
<li>understand the requirements and intent</li>
<li>ask to see the tests</li>
<li>review the design</li>
<li>collaborate to find ways to make the code better</li>
<li>be engaged</li>
</ol>
<p>Responsibilities of the developer:</p>
<ol>
<li>Do not take feedback personally and be prepared to collaborate</li>
<li>reduce the size and scope of the review by having frequent reviews</li>
<li>communicate the requirements and intent</li>
<li>being willing to talk about the “what” and the “why” you did something</li>
<li>be willing to make adjustments based on feedback</li>
<li>be engaged</li>
</ol>
<p><a href="http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/">Don’t Just Say You’re Doing Code Reviews</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shawnmeyer.com/2011/03/dont-just-say-youre-doing-code-reviews/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Scalability and Optimization Part 2</title>
		<link>http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 11:57:37 +0000</pubDate>
		<dc:creator>Shawn Meyer</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[Session State]]></category>

		<guid isPermaLink="false">http://shawnmeyer.com/?p=89</guid>
		<description><![CDATA[In the last post I showed a few ways to reduce bandwidth usage by taking advantage of the Microsoft CDN, ScriptManager, and the AJAX Minifier. In this post I will explain a scalable approach used to better manage session state while scaling with a changing environment.
 <a href="http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/">ASP.NET Scalability and Optimization Part 2</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></description>
			<content:encoded><![CDATA[<p>In the last post I showed a few ways to reduce bandwidth usage by taking advantage of the Microsoft CDN, ScriptManager, and the AJAX Minifier. In this post I will explain a scalable approach used to better manage session state while scaling with a changing environment.</p>
<p><strong>The Problem</strong></p>
<p>Over the last few months we had seen increased traffic on our servers and higher memory usage. At first, our solution was to vertically improve the existing servers’ hardware, and then horizontally by adding more nodes to our web farm. Initially, this worked; however, it introduced a new set of problems for maintenance and load balancing. It soon became obvious we were out-growing our current design. We knew we needed to find a scalable solution if we wanted a maintenance-friendly and highly available web application.</p>
<p>Our web application contains state data for each user in a session. Each session was stored on the server in-process. This meant the session was not accessible by other instances of the web application running on other servers (or other processes on the same server). This design choice provided a fast performing session state solution, but caused problems with load balancing and maintenance.</p>
<p>For load balancing we sent new requests, requests not tied to an active session, to the node with the least traffic. For existing requests, requests tied to an active session, we sent all subsequent requests to the same node until the session expired. This worked for a while, until we needed to perform maintenance. When we had to bring down a server we needed to prevent new sessions and had to wait for all existing sessions to end (wait for users to log out or the session to timeout) before bringing down a server for maintenance. As you can see this became time consuming as the number of nodes continued to grow.</p>
<p><strong>Why Session State</strong></p>
<p>Originally our design choices were made based on our current demands. We chose a solution that fit our needs and also provided the quickest performance. As our environment changed so did our needs. We believed our design choice for managing session state would fix many of our issues.</p>
<p>We thought that sacrificing some speed by storing session data in a database would payback dividends in reduced memory usage, shared session state, and persisted session data.</p>
<p><strong>Installing the ASPState Database</strong></p>
<p>The first thing to do is setup the database. Fortunately, Microsoft has made this easy by providing the T-SQL DDL and shipping it with ASP.Net. To build the tables start by opening the Visual Studio Command Prompt and use the aspnet_reqsql.exe tool to build the database.</p>
<pre> aspnet_regsql.exe  -?</pre>
<p>This command displays all of the options available to use with aspnet_reqsql.exe. For this purpose we want to look at the options below.</p>
<p>-ssadd        Install the SQL Server session state.<br />
-sstype p   Use a persisted session state (t: temporary and c: custom).<br />
-S                A connection string to the database server.<br />
-U               SQL Server Login ID<br />
-P               Password<br />
-E               Alternatively, this users Windows Authentication</p>
<h5>For additional aspnet_regsql.exe options and details read the article <a href="http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx">ASP.NET SQL Server Registration Tool (Aspnet_regsql.exe)</a>.</h5>
<p>I have decided to use the following command to install the ASPState database using SQL Server Authentication.</p>
<pre>aspnet_regsql.exe -ssadd -sstype p -S MyServer -L sgmeyer –P *****</pre>
<p>Once the installation is complete you can view the tables in the newly created ASPState database. This database contains all of the tables, views, and stored procedures you need.</p>
<p><strong>Configuring the Session State Mode</strong></p>
<p>Next, tell ASP.NET to start storing the state in the new server. Start by opening up the Web.config, and update it with the following configuration.</p>
<pre name="code" class="xml">&lt;system.web&gt;
  &lt;sessionState mode="SQLServer" cookieless="UseCookies"
  sqlConnectionString="Server=MyServer;Database=ASPState;Integrated Security=SSPI"
  compressionEnabled="True" allowCustomSqlDatabase="True" timeout="60"
  sqlCommandTimeout="10" /&gt;
&lt;/system.web&gt;</pre>
<p>Now, spin up your application, and open the ASPState database and you can see the tables are being updated with the session.</p>
<p><strong>A Piece of Advice</strong></p>
<p>When working with SQLServer session mode all objects are serialized and written to the database. When you work with an in-process session, objects are referenced in local memory and are not serialized. If you are converting an existing application or creating a new object to be stored in a persisted session, be sure those objects and the objects they reference are serializable. The compiler does not check if you add a non-serializable object to a persisted session, instead you will receive a runtime exception.</p>
<p>Note that if you subscribe to the Session_End event this will not work with SQLServer mode. The Session_End event will only be fired when using InProc session state, while the Session_Start event will continue to work as expected.</p>
<h5>For more information or serialization see the article <a href="http://msdn.microsoft.com/en-us/library/ms973893.aspx">Object Serialization in the .NET Framework</a>.</h5>
<p><strong>Conclusion</strong></p>
<p>Every project has its own priorities and objectives. The .NET Framework offers a rich set of options for managing session state, each with a different set of pros and cons. It is important to understand the benefits of each option before making a decision. There is not a silver bullet solution for every problem. Identify your objective before picking a solution.</p>
<p><a href="http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/">ASP.NET Scalability and Optimization Part 2</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shawnmeyer.com/2011/03/asp-net-scalability-and-optimization-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Scalability and Optimization Part 1</title>
		<link>http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 00:11:10 +0000</pubDate>
		<dc:creator>Shawn Meyer</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Optmiization]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[Optimization]]></category>
		<category><![CDATA[ScriptManager]]></category>

		<guid isPermaLink="false">http://shawnmeyer.com/?p=30</guid>
		<description><![CDATA[Part 1 of ASP.NET Scalability and Optimization series.  In this part of the series we look at how to limit bandwidth and enhance user experience.  We take a look at ways to improve strategies around hosting JavaScript content. <a href="http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/">ASP.NET Scalability and Optimization Part 1</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Lately I have been spending a lot of time optimizing a fairly high traffic .NET web application.  Over the last few months, performance has become a pretty big concern.  Based on current traffic, we are pushing our monthly bandwidth limitations while memory and server load continue to become a growing concern.</p>
<p>Over the course of the next few posts I will talk about what I did to remedy these scalability issues.  As bandwidth was my initial concern, I will start by talking about what I did to decrease bandwidth and some of the concerns I faced.</p>
<p><strong>Where To Start</strong></p>
<p>When optimizing code it can be difficult to know where to start, however taking advantage of good tools can simplify this task.  I used our web metrics tool to find bandwidth and traffic hot spots.  In my case, our website’s metrics are collected through Google Analytics.</p>
<p>When working on a tight deadline it can be a difficult task to weigh bandwidth consumption per visit versus high traffic pages.  In our case we could make significant improvements just about anywhere so I started with the high traffic pages.</p>
<p>Once I found a starting point, I navigated to those pages using FireFox with the YSlow plug-in installed.  I found YSlow to be particularly useful.  If you have not already used YSlow it is a tool that grades your websites performance based on well-defined and accepted criteria (<a href="http://developer.yahoo.com/yslow/">Yahoo! YSlow</a>).  This tool is very well documented so I will not spend a lot of time discussing its merits.</p>
<p><strong>JavaScript Woes and Sorrows… Saved by the ScriptManager</strong></p>
<p>Using YSlow, I found the biggest problems were related to JavaScript.  The biggest bandwidth hog contained inline script as well as fourteen JavaScript files; amongst those were the Microsoft AJAX JavaScript libraries.  The JavaScript footprint had a total weight of 556 KB despite being GZipped.</p>
<p>To setup some of the enhancements, I moved the inline JavaScript into a file.  This may sound counter intuitive now, but as we will see next this will play to our benefit.</p>
<p>My first priority was to decrease the size of the JavaScript files.  If you are not already familiar with minifying it is the process of reducing the size of HTML, CSS, or JavaScript.  There are many free tools available to minify JavaScript.  I chose to use the Microsoft AJAX Minifier.  Using the command below, I was able to minify all of the JavaScript files.  For simplicity&#8217;s sake I am running the minifier manually, but it is possible to integrate the tool within Visual Studio 2010 (<a href="http://stephenwalther.com/blog/archive/2009/10/16/using-the-new-microsoft-ajax-minifier.aspx">Using the New Microsoft AJAX Minifier</a>).</p>
<pre>ajaxmin &#45;hc scriptName.debug.js &#45;out scriptName.js</pre>
<p>This script takes advantage of Hyper Crunching (-hc), which is an aggressive minifying feature provided by the Microsoft AJAX Minifier.  This performs basic file reduction by removing whitespace and unneeded characters.  It also reduces non-global variable names, extra curly braces, dead code, and more.  As a precaution always test the minified JavaScript prior to deploying.</p>
<p>Once my JavaScript files were minified I was already boasting good reduction in JavaScript file size.  Although, with the minified files in place, I still did not see the bandwidth cut I was hoping to achieve.</p>
<p><strong>Reducing Bandwidth By Hosting Files on a CDN</strong></p>
<p>YSlow has a category that grades your usage of a CDN.  Many developers ignore this grade, as hosting content on a CDN used to require a paid service.  Now there are several free CDNs available to use including those provided by Microsoft and Google.</p>
<p>Our application uses the Microsoft AJAX Library’s JavaScript, which is managed by a ScriptManager control.  Since we are hosting the AJAX libraries we spend our own bandwidth to host these files.  Through the use of the ScriptManager we can take advantage of the Microsoft CDN to host the AJAX Libraries.  This technique does not reduce the amount of data downloaded by a user, unless previously cached.  Instead, we are now using Microsoft’s bandwidth to host those files rather than our own.   Hosting on a CDN provides other benefits such as localized content and quicker page loads.</p>
<pre name="code" class="xml">&lt;asp:ScriptManager ID="ScriptManager1" EnableCdn=”true" runat="server"&gt;
&lt;/asp:ScriptManager&gt;
</pre>
<p>It is important to note that we now have a dependency on Microsoft’s CDN.  If the CDN is not available your AJAX files will also be unavailable.  As unlikely as it may seem it is important to know the risks no matter how marginal they may appear.</p>
<p><strong>Finishing Touches</strong></p>
<p>Now that that we have taken a big bite out of the bandwidth usage; I took one last step to reduce the number of HTTP requests.  As mentioned earlier I had a number of small JavaScript files that I wanted to combine into a single file.  Again, I can rely on ScriptManager to combine these files for me.  As a side note, the ScriptManager is more efficient at combining assembly-based JavaScript when compared to path-based scripts.</p>
<pre name="code" class="xml">&lt;asp:ScriptManager EnableCdn=”true”&gt;
  &lt;CompositeScript&gt;
    &lt;Scripts&gt;
      &lt;asp:ScriptReference Path="script1.js" /&gt;
      &lt;asp:ScriptReference Path="script2.js" /&gt;
    &lt;/Scripts&gt;
  &lt;/CompositeScript
&lt;/asp:ScriptManager&gt;
</pre>
<p>Be cautious when combining scripts.  This is not a silver bullet.  Combining too many files can be detrimental to page load.  Today’s browsers allow concurrent HTTP requests.  If you combine too many files this could slow down content retrieval since the browser cannot download the content in parallel.  Also, by splitting our content between Microsoft’s CDN and our own servers it allowed the browser to be more efficient when retrieving content.  Typically, browsers can perform parallel requests, however they limit the number of concurrent requests per domain.  By spreading our content across multiple domains the browser was able to download the content more efficiently.  Finding the right balance is definitely something you should experiment with to find the best gains.</p>
<p>As a side note, you can leverage the ScriptManager to combine scripts even if you do not want to host the AJAX Library.  The ScriptManager exposes an enumeration allowing the developer to leverage the benefit of ScriptManager without hosting the AJAX Library.</p>
<pre name="code" class="xml">&lt;asp:ScriptManager AjaxFrameworkMode=”Enable|Disable|Explicit”&gt;&lt;/asp:ScriptManager&gt;
</pre>
<p>More details can be found <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.ajaxframeworkmode.aspx">here</a> and <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.ajaxframeworkmode.aspx">here</a>.</p>
<p><strong>Conclusion</strong></p>
<p>When used properly minifying, script combining, and CDN hosting can be good ways to improve user experience and improve performance.  Microsoft has provided many of the tools you need to employ these techniques and observe these benefits immediately.  With any good tool it is possible to misuse it.  I recommend experimenting with these techniques to find the best implementation for your web application.</p>
<p><a href="http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/">ASP.NET Scalability and Optimization Part 1</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shawnmeyer.com/2010/10/asp-net-scalability-and-optimization-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Enterprise Library to Decrypt a Java Encrypted Message</title>
		<link>http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 02:05:27 +0000</pubDate>
		<dc:creator>Shawn Meyer</dc:creator>
				<category><![CDATA[Encryption]]></category>
		<category><![CDATA[Java and .NET Integration]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Enterprise Library]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Rijndael]]></category>

		<guid isPermaLink="false">http://shawnmeyer.com/?p=9</guid>
		<description><![CDATA[Decrypting a message using Microsoft's Enterprise Library can be a difficult task when working with other encryption frameworks.  In this scenario I look at how to decrypt a message encrypted using a Java Rijndael implementation. <a href="http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/">Using Enterprise Library to Decrypt a Java Encrypted Message</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Last week I stumbled upon a tricky problem when tasked with encrypting and decrypting messages sent between a Java and .NET application.  The Java application was responsible for encrypting a message while the .NET application consumed and decrypted the message.  Ignoring the debate over the usage of an asymmetric algorithm, I was required to use a symmetric algorithm, specifically Rijndael.</p>
<p>Since we are primarily a .NET shop I was expected to use the Enterprise Library, for good reason, as it simplifies encryption and decryption.  I quickly realized the simplicity gained on the .NET side was a trade off for additional complexity on the Java side.  To start let us look at the basic Java code needed to encrypt a string.</p>
<pre name="code" class="java">
public String encrypt(String auth) {
  try {
    byte[] key = // shared key as Base 64
    byte[] iv = Base64.decodeBase64("IV STRING");

    SecretKeySpec spec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    cipher.init(Cipher.ENCRYPT_MODE, spec, new IvParameterSpec(iv));
    byte[] unencrypted = StringUtils.getBytesUtf16(auth);
    byte[] encryptedData = cipher.doFinal(unencrypted);
    String encryptedText = new String(encryptedData);
    encryptedText = Base64.encodeBase64String(encryptedData);

    return encryptedText;
  } catch (Exception e) { }

  return "";
}
</pre>
<p>From the code above you can see we have a method that performs a pretty basic encryption.  Now let us look at the .NET code we will use to decrypt the message encrypted using the above method.</p>
<pre name="code" class="c-sharp">
string message = Cryptographer.DecryptSymmetric(“RijndaelManaged”, encryptedText);
</pre>
<p>Next, I built the applications and tested out my encryption and decryption methods and they soon failed.  As you can see above the .NET code does not appear to use an IV.  Thankfully, Microsoft published the Enterprise Library code.  After taking a look I noticed something interesting.  Microsoft randomly generates an IV each time the EncryptSymmetric method is called and then prepends the IV to the encrypted message.  Accordingly, the DecryptSymmetric method assumes the IV will be prepended to the encrypted message and extracts the prepended bytes before attempting to decrypt the message.   I then went back to the Java application and added the following code.</p>
<pre name="code" class="java">
encryptedText = Base64.encodeBase64String(encryptedData);

byte[] entlib = new byte[iv.length + encryptedData.length];
System.arraycopy(iv, 0, entlib, 0, iv.length);
System.arraycopy(encryptedData, 0, entlib, iv.length, encryptedData.length);

return Base64.encodeBase64String(entlib);
</pre>
<p>Again, I built the code and to my frustration it did not work.  However, this time the .NET code actually decrypted the message, but the output resulted in funny characters.  Now I suspected it was an encoding problem, but I was still confused as I knew the Enterprise Library used UTF-16 or Unicode encoding.  I decided to open up the code in Visual Studio and I realized the Enterprise Library did indeed use Unicode encoding, however it used little endian byte order.  So I went back to the StringUtils API and found a static method called getBytesUtf16Le(String string).</p>
<p>So I replaced:</p>
<pre name="code" class="java">
byte[] unencrypted = StringUtils.getBytesUtf16(auth);
</pre>
<p>With:</p>
<pre name="code" class="java">
byte[] unencrypted = StringUtils.getBytesUtf16Le(auth);
</pre>
<p>After building the code I finally had this little problem solved.  This turned out to be a bit more complex than I initially thought, however thankfully Microsoft provided the source code needed to solve the problem.</p>
<p><a href="http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/">Using Enterprise Library to Decrypt a Java Encrypted Message</a> is a post from: <a href="http://shawnmeyer.com">ShawnMeyer.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shawnmeyer.com/2010/10/using-enterprise-library-to-decrypt-a-java-encrypted-message/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

