<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0"><channel><title>Official Website of Ryan Olshan: Technology</title><link>http://ryanolshan.com/technology/</link><description /><generator>Graffiti CMS 1.2 (build 1.2.0.1451)</generator><lastBuildDate>Mon, 10 Nov 2008 23:00:00 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/RoTech" type="application/rss+xml" /><item><title>Role-based authentication in Lullaby</title><link>http://ryanolshan.com/technology/role-based-authentication-in-lullaby/</link><pubDate>Mon, 10 Nov 2008 23:00:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/role-based-authentication-in-lullaby/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;&lt;a href="http://ryanolshan.com/technology/lullaby-1-0-rc3-released/"&gt;Lullaby 1.0 RC3&lt;/a&gt; introduced role-based authentication. Using role-based authentication, you can further restrict access to a REST service or REST method by a role using the AllowedRoles property of the RequireAuthentication attribute.&lt;/p&gt;
&lt;p&gt;[RequireAuthentication(AllowedRoles = &amp;quot;User,Admin&amp;quot;)]&lt;/p&gt;
&lt;p&gt;If using an authentication provider, Lullaby will check against the roles returned from the provider. If using forms authentication, it will invoke IsUserInRole.&lt;/p&gt;</description></item><item><title>Lullaby 1.0 RC3 Released</title><link>http://ryanolshan.com/technology/lullaby-1-0-rc3-released/</link><pubDate>Mon, 10 Nov 2008 22:53:12 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/lullaby-1-0-rc3-released/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;Lullaby 1.0 RC3 is now released and can be downloaded &lt;a target="_blank" href="http://ryanolshanrest.googlecode.com/files/Lullaby%201.0%20RC3.zip"&gt;here&lt;/a&gt;. RC3 is the last release candidate. The next release will be the final 1.0 release and will contain bug fixes only&amp;nbsp;as RC3 is feature complete.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Fixed bug where security tokens were being added to the cache even though a previous security token was issued for a user&lt;/li&gt;
    &lt;li&gt;Added role-based security&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>ReSharper License Giveaway</title><link>http://ryanolshan.com/technology/resharper-license-giveaway/</link><pubDate>Tue, 04 Nov 2008 18:50:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/resharper-license-giveaway/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;&lt;a target="_blank" href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; is one of my favorite add-ins for Visual Studio. I'll be giving away 2 ReSharper licenses (retail price $199) during my &lt;a target="_blank" href="http://www.siliconvalley-codecamp.com/Sessions.aspx?id=120"&gt;session&lt;/a&gt; at the &lt;a target="_blank" href="http://www.siliconvalley-codecamp.com"&gt;Silicon Valley Code Camp&lt;/a&gt; this Saturday&amp;nbsp;and at &lt;a href="http://ryanolshan.com/speaking/"&gt;upcoming speaking engagements&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below is just a small example of the power of ReSharper.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="272" alt="" width="456" align="absMiddle" src="http://ryanolshan.com/files/media/image/Resharper.png" /&gt;&lt;/p&gt;</description></item><item><title>Lullaby 1.0 RC2 Released</title><link>http://ryanolshan.com/technology/lullaby-1-0-rc2-released/</link><pubDate>Mon, 27 Oct 2008 15:37:43 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/lullaby-1-0-rc2-released/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>4</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;Lullaby 1.0 RC2 is now released and can be downloaded &lt;a target="_blank" href="http://code.google.com/p/ryanolshanrest"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Fixed bug that prevented URI template matches from being found across multiple assemblies&lt;/li&gt;
    &lt;li&gt;Added support for forms authentication&lt;/li&gt;
    &lt;li&gt;Added feature to exclude a REST method from cache by class or method&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Not At PDC</title><link>http://ryanolshan.com/technology/notatpdc/</link><pubDate>Mon, 27 Oct 2008 01:55:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/notatpdc/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;For those of you not attending &lt;a target="_blank" href="http://www.microsoftpdc.com/"&gt;PDC&lt;/a&gt;, don't feel left out. &lt;a target="_blank" href="http://professionalaspnet.com/"&gt;Chris Love&lt;/a&gt; is organizing &lt;a target="_blank" href="http://notatpdc.com"&gt;Not At PDC&lt;/a&gt;. The airfare, hotel, and registration is free and it's in every city across the US. The only thing to note is weather vary's by event, so please dress accordingly. I'll be submitting a session for Thursday and will be speaking on REST. See you at NotAtPDC.&lt;/p&gt;
&lt;p style="margin-left: 40px"&gt;&lt;em&gt;For those of you not at PDC, or those that are we have started a thing today called Not At PDC. We are going to have live meeting sessions, links to Blogs, Podcasts and any other .NET related content featured this week. Right now we are trying to get things organized better. We will have a site live in the morning. If you want to schedule a session or something DM &lt;/em&gt;&lt;a target="_blank" href="http://twitter.com/NotAtPDC"&gt;&lt;em&gt;http://twitter.com/NotAtPDC&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>SoCal Code Camp Presentations</title><link>http://ryanolshan.com/technology/socal-code-camp-presentations/</link><pubDate>Sat, 25 Oct 2008 21:05:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/socal-code-camp-presentations/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;I had a great time at SoCal Code Camp and it was nice getting to catch up and meet with the local and out of town speakers and attendes. I had a couple of&amp;nbsp;technical difficulties, but other than that&amp;nbsp;my presentations went well.&lt;/p&gt;
&lt;p&gt;You can download my presentations and sample code below.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://ryanolshan.com/files/media/file/Architecting and Consuming REST APIs in DotNet with Lullaby.pdf"&gt;Architecting and Consuming REST APIs in .NET Using Lullaby&lt;/a&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a target="_blank" href="http://code.google.com/p/ryanolshanrest"&gt;Download Lullaby&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://ryanolshan.com/files/media/file/Whats New in DotNet 35 ASPNET 35 Visual Studio 2008.pdf"&gt;What's New in .NET 3.5, .NET 3.5 SP1, ASP.NET 3.5, and Visual Studio 2008&lt;/a&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href="http://ryanolshan.com/technology/linqdatasource-listview-and-datapager-example/"&gt;LinqDataSource, ListView, and DataPager example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Announcing Lullaby 1.0 RC1</title><link>http://ryanolshan.com/technology/announcing-lullaby-1-0-rc1/</link><pubDate>Fri, 03 Oct 2008 20:23:45 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/announcing-lullaby-1-0-rc1/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;Lullaby, an extensible open source attribute-based framework for creating RESTful .NET services is now available for download as a release candidate. Lullaby 1.0 RC1 features include:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Authentication provider model&lt;/li&gt;
    &lt;li&gt;Cache provider model&lt;/li&gt;
    &lt;li&gt;Cache invalidation framework configurable by both attributes and an XML file&lt;/li&gt;
    &lt;li&gt;Extensible serialization framework&lt;/li&gt;
    &lt;li&gt;Search for URL template matches across multiple assemblies&lt;/li&gt;
    &lt;li&gt;Service URL routing using System.Web.Routing&lt;/li&gt;
    &lt;li&gt;Extensible API&lt;/li&gt;
    &lt;li&gt;Support for application/x-www-form-urlencoded MIME type&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Download binaries and documentation - &lt;a target="_blank" href="http://ryanolshanrest.googlecode.com/files/Lullaby%201.0%20RC1.zip"&gt;http://ryanolshanrest.googlecode.com/files/Lullaby%201.0%20RC1.zip&lt;/a&gt;&lt;br /&gt;
Download documentation - &lt;a target="_blank" href="http://ryanolshanrest.googlecode.com/files/Lullaby.pdf"&gt;http://ryanolshanrest.googlecode.com/files/Lullaby.pdf&lt;/a&gt;&lt;br /&gt;
Lullaby Google Group - &lt;a target="_blank" href="http://groups.google.com/group/lullaby-rest"&gt;http://groups.google.com/group/lullaby-rest&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Change to RestClassAttribute and RestMethodAttribute</title><link>http://ryanolshan.com/technology/change-to-restclassattribute-and-restmethodattribute/</link><pubDate>Mon, 22 Sep 2008 18:33:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/change-to-restclassattribute-and-restmethodattribute/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;Shortly after posting &lt;a href="http://ryanolshan.com/technology/handling-post-and-put-methods-with-lullaby/"&gt;Handling POST and PUT methods with Lullaby&lt;/a&gt;, I started thinking about how the implementation dictating that the type the request stream is deserialized to is the REST methods enclosing type&amp;nbsp;should&amp;nbsp;be changed to have the option to be configured by the user. I made a change to RestClassAttribute and RestMethodAttribute that allows for this.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;RestMethodAttribute.DeserializeRequestStream (System.Boolean) - This property allows the user to specify&amp;nbsp;that the request stream should be deserialized. This is set to true by default for POST and PUT method requests.&lt;/li&gt;
    &lt;li&gt;RestMethodAttribute.DeserializationType (System.Type) - This property sets the type to deserialize the request stream to. If a value is not set for this property,&amp;nbsp;then&amp;nbsp;the request stream will be deserialized as the enclosed type of the REST method. Setting this property on the RestClassAttribute&amp;nbsp;attribute will override the type to deserialize to for all REST methods in the REST class.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Handling POST and PUT methods with Lullaby</title><link>http://ryanolshan.com/technology/handling-post-and-put-methods-with-lullaby/</link><pubDate>Mon, 22 Sep 2008 16:49:00 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/handling-post-and-put-methods-with-lullaby/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;UPDATE: See &lt;a href="http://ryanolshan.com/technology/change-to-restclassattribute-and-restmethodattribute/"&gt;Change to RestClassAttribute and RestMethodAttribute&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When a POST or PUT method is sent to Lullaby,&amp;nbsp;the request stream is deserialized to&amp;nbsp;the type of the REST class that is currently being invoked and the REST method is invoked with the deserialized object. The REST method for a POST or PUT method needs to have one argument that is of the type of the enclosing&amp;nbsp;REST class. Below is an example of a XML request stream and a simple&amp;nbsp;Lullaby REST class and REST&amp;nbsp;POST method.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Address&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;AddressLine1&amp;gt;123 My Street&amp;lt;/AddressLine1&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;AddressLine2&amp;gt;Suite 2&amp;lt;/AddressLine2&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;City&amp;gt;Blahville&amp;lt;/City&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;State&amp;gt;CA&amp;lt;/State&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;Zip&amp;gt;90023&amp;lt;/Zip&amp;gt;&lt;br /&gt;
&amp;lt;/Address&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;When the above request stream is deserialized to the below type of Address, the XML nodes will match up to their equivelent properties.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;[RestClass]&lt;br /&gt;
public class Address&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; public int AddressID { get; set; }&lt;br /&gt;
&amp;nbsp; public&amp;nbsp;string&amp;nbsp;AddressLine1&amp;nbsp;{ get; set; }&lt;br /&gt;
&amp;nbsp; public string AddressLine2 { get; set; }&lt;br /&gt;
&amp;nbsp; public&amp;nbsp;string City&amp;nbsp;{ get; set; }&lt;br /&gt;
&amp;nbsp; public&amp;nbsp;string State&amp;nbsp;{ get; set; }&lt;br /&gt;
&amp;nbsp; public string Zip { get; set; }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; [RestClass(HttpMethods.Method.POST)]&lt;br /&gt;
&amp;nbsp; public&amp;nbsp;Address CreateAddress(Address address)&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//...&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The address parameter in the&amp;nbsp;CreateAddress method will be the result of the deserialized request stream.&lt;/p&gt;
&lt;p&gt;For POST and PUT methods, a Content-Type header on the request must be specified. Lullaby.Serialization.SerializationTable handles routing of MIME types to serializers. By default, the following MIME types are mapped:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;application/javascript&lt;/li&gt;
    &lt;li&gt;application/json&lt;/li&gt;
    &lt;li&gt;application/json+javascript&lt;/li&gt;
    &lt;li&gt;application/x-www-form-urlencoded&lt;/li&gt;
    &lt;li&gt;application/xml&lt;/li&gt;
    &lt;li&gt;text/javascript&lt;/li&gt;
    &lt;li&gt;text/xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using the serialization table, you can change how MIME types are mapped to serializers and add and remove MIME type mappings. For example, if you wanted to add a MIME type of application/blah and map it to a serializer of BlahSerializer, you would do the following (BlahSerializer must implement Lullaby.Serialization.ISerializer):&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;SerializationTable.Deserializers.Add(&amp;quot;application/blah&amp;quot;, (valueToSerializeToObject, type) =&amp;gt; new BlahSerializer.Deserialize(valueToSerializeToObject, type));&lt;br /&gt;
SerializationTable.Serializers.Add(&amp;quot;application/blah&amp;quot;, (objectToSerialize) =&amp;gt; new BlahSerializer.Serialize(objectToSerialize));&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Lullaby 1.0 Beta 3 released</title><link>http://ryanolshan.com/technology/lullaby-1-0-beta-3-released/</link><pubDate>Thu, 18 Sep 2008 21:24:24 GMT</pubDate><guid isPermaLink="true">http://ryanolshan.com/technology/lullaby-1-0-beta-3-released/</guid><dc:creator>Ryan Olshan</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanolshan.com/technology/">Technology</category><description>&lt;p&gt;Lullaby 1.0 Beta&amp;nbsp;3 is now released. You can download the latest version at &lt;a href="http://code.google.com/p/ryanolshanrest"&gt;http://code.google.com/p/ryanolshanrest&lt;/a&gt;. This release was released earlier than expected&amp;nbsp;because of a bug that was discovered that prevented post and put method requests from working.&lt;/p&gt;
&lt;p&gt;New Features&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://ryanolshan.com/technology/lullaby-service-url-routing/"&gt;Service URL routing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;OPTIONS method supported on service&lt;/li&gt;
    &lt;li&gt;Default serialization and caching provider don't have to be provided in web.config out of the box, but are still configurable in web.config&lt;/li&gt;
    &lt;li&gt;Support for application/x-www-form-urlencoded requests&lt;/li&gt;
    &lt;li&gt;XML comments are now generated for the assembly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bugs Fixed&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Fixed bug that prevented post and put method requests from working properly&lt;/li&gt;
    &lt;li&gt;Post method now sends 201 status code and Created status code description instead of 200/OK&lt;/li&gt;
    &lt;li&gt;Fixed bug where a trailing / in some URI templates was causing issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lullaby now includes a CHM help file for API documentation.&lt;/p&gt;</description></item></channel></rss>
