<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -2,12 +2,12 @@
 &lt;configuration&gt;
   &lt;configSections&gt;
     &lt;sectionGroup name=&quot;applicationSettings&quot; type=&quot;System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; &gt;
-      &lt;section name=&quot;Application.Settings&quot; type=&quot;System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; requirePermission=&quot;false&quot; /&gt;
+      &lt;section name=&quot;Application.AppSettings&quot; type=&quot;System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; requirePermission=&quot;false&quot; /&gt;
     &lt;/sectionGroup&gt;
   &lt;/configSections&gt;
 
   &lt;applicationSettings&gt;
-    &lt;Application.Settings&gt;
+    &lt;Application.AppSettings&gt;
       &lt;setting name=&quot;FlickrUri&quot; serializeAs=&quot;String&quot;&gt;
         &lt;value&gt;http://api.flickr.com/services/rest/?method=flickr.{operation}&amp;amp;api_key={apiKey}&amp;amp;format=json&amp;amp;nojsoncallback=1&lt;/value&gt;
       &lt;/setting&gt;
@@ -21,14 +21,14 @@
         &lt;value&gt;[Your Subscription ID]&lt;/value&gt;
       &lt;/setting&gt;
       &lt;setting name=&quot;LiveSearchUri&quot; serializeAs=&quot;String&quot;&gt;
-        &lt;value&gt;http://api.{operation}.live.net/json.aspx?AppId={appID}&amp;amp;Market=en-US&amp;amp;Sources=web&lt;/value&gt;
+        &lt;value&gt;http://api.search.live.net/json.aspx?AppId={appID}&amp;amp;Market=en-US&amp;amp;Sources=web&lt;/value&gt;
       &lt;/setting&gt;
       &lt;setting name=&quot;LiveSearchApiKey&quot; serializeAs=&quot;String&quot;&gt;
         &lt;value&gt;[Your API Key]&lt;/value&gt;
       &lt;/setting&gt;
       &lt;setting name=&quot;GoogleSearchUri&quot; serializeAs=&quot;String&quot;&gt;
-        &lt;value&gt;http://ajax.googleapis.com/ajax/services/{operation}/web?v=1.0&lt;/value&gt;
+        &lt;value&gt;http://ajax.googleapis.com/ajax/services/search/web?v=1.0&lt;/value&gt;
       &lt;/setting&gt;
-    &lt;/Application.Settings&gt;
+    &lt;/Application.AppSettings&gt;
   &lt;/applicationSettings&gt;
 &lt;/configuration&gt;</diff>
      <filename>App.config</filename>
    </modified>
    <modified>
      <diff>@@ -14,14 +14,14 @@
     &lt;Setting Name=&quot;AmazonSubscriptionID&quot; Type=&quot;System.String&quot; Scope=&quot;Application&quot;&gt;
       &lt;Value Profile=&quot;(Default)&quot;&gt;[Your Subscription ID]&lt;/Value&gt;
     &lt;/Setting&gt;
-    &lt;Setting Name=&quot;LiveSearchUri&quot; Type=&quot;System.String&quot; Scope=&quot;User&quot;&gt;
-      &lt;Value Profile=&quot;(Default)&quot;&gt;http://api.{operation}.live.net/json.aspx?AppId={appID}&amp;amp;Market=en-US&amp;amp;Sources=web&lt;/Value&gt;
+    &lt;Setting Name=&quot;LiveSearchUri&quot; Type=&quot;System.String&quot; Scope=&quot;Application&quot;&gt;
+      &lt;Value Profile=&quot;(Default)&quot;&gt;http://api.search.live.net/json.aspx?AppId={appID}&amp;amp;Market=en-US&amp;amp;Sources=web&lt;/Value&gt;
     &lt;/Setting&gt;
-    &lt;Setting Name=&quot;LiveSearchApiKey&quot; Type=&quot;System.String&quot; Scope=&quot;User&quot;&gt;
+    &lt;Setting Name=&quot;LiveSearchApiKey&quot; Type=&quot;System.String&quot; Scope=&quot;Application&quot;&gt;
       &lt;Value Profile=&quot;(Default)&quot;&gt;[Your API Key]&lt;/Value&gt;
     &lt;/Setting&gt;
-    &lt;Setting Name=&quot;GoogleSearchUri&quot; Type=&quot;System.String&quot; Scope=&quot;User&quot;&gt;
-      &lt;Value Profile=&quot;(Default)&quot;&gt;http://ajax.googleapis.com/ajax/services/{operation}/web?v=1.0&lt;/Value&gt;
+    &lt;Setting Name=&quot;GoogleSearchUri&quot; Type=&quot;System.String&quot; Scope=&quot;Application&quot;&gt;
+      &lt;Value Profile=&quot;(Default)&quot;&gt;http://ajax.googleapis.com/ajax/services/search/web?v=1.0&lt;/Value&gt;
     &lt;/Setting&gt;
   &lt;/Settings&gt;
 &lt;/SettingsFile&gt;
\ No newline at end of file</diff>
      <filename>AppSettings.settings</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,8 @@ namespace DynamicRest {
         private Dictionary&lt;string, object&gt; _parameters;
 
         public RestClient(string uriFormat, RestClientMode mode)
-            : base(StandardActionKinds.GetMember | StandardActionKinds.SetMember | StandardActionKinds.Call) {
+            : base(StandardActionKinds.GetMember | StandardActionKinds.SetMember |
+                   StandardActionKinds.Call | StandardActionKinds.Invoke) {
             _uriFormat = uriFormat;
             _mode = mode;
         }
@@ -48,23 +49,7 @@ namespace DynamicRest {
                 operation = _operationGroup + &quot;.&quot; + operation;
             }
 
-            JsonObject argsObject = null;
-            if ((args != null) &amp;&amp; (args.Length != 0)) {
-                argsObject = (JsonObject)args[0];
-            }
-            Uri requestUri = CreateRequestUri(operation, argsObject);
-
-            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
-            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
-
-            if (webResponse.StatusCode == HttpStatusCode.OK) {
-                Stream responseStream = webResponse.GetResponseStream();
-
-                return ProcessResponse(responseStream);
-            }
-            else {
-                return null;
-            }
+            return PerformOperation(operation, args);
         }
 
         private Uri CreateRequestUri(string operation, JsonObject parameters) {
@@ -78,7 +63,7 @@ namespace DynamicRest {
                 Group formatGroup = m.Groups[&quot;format&quot;];
                 Group endGroup = m.Groups[&quot;end&quot;];
 
-                if (String.CompareOrdinal(propertyGroup.Value, &quot;operation&quot;) == 0) {
+                if ((operation.Length != 0) &amp;&amp; String.CompareOrdinal(propertyGroup.Value, &quot;operation&quot;) == 0) {
                     values.Add(operation);
                 }
                 else if (_parameters != null) {
@@ -129,6 +114,30 @@ namespace DynamicRest {
             return operationGroupClient;
         }
 
+        protected override object Invoke(InvokeAction action, params object[] args) {
+            return PerformOperation(String.Empty, args);
+        }
+
+        private object PerformOperation(string operation, params object[] args) {
+            JsonObject argsObject = null;
+            if ((args != null) &amp;&amp; (args.Length != 0)) {
+                argsObject = (JsonObject)args[0];
+            }
+            Uri requestUri = CreateRequestUri(operation, argsObject);
+
+            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
+            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
+
+            if (webResponse.StatusCode == HttpStatusCode.OK) {
+                Stream responseStream = webResponse.GetResponseStream();
+
+                return ProcessResponse(responseStream);
+            }
+            else {
+                return null;
+            }
+        }
+
         private object ProcessResponse(Stream responseStream) {
             dynamic result = null;
 </diff>
      <filename>DynamicRest/RestClient.cs</filename>
    </modified>
    <modified>
      <diff>@@ -7,3 +7,6 @@ added to c# 4.0.
 
 JSON data
 http://www.nikhilk.net/CSharp-Dynamic-Programming-JSON.aspx
+
+REST client
+http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ namespace Application {
 
             dynamic searchOptions = new JsonObject();
             searchOptions.q = &quot;seattle&quot;;
-            dynamic response = googleSearch.search(searchOptions);
+            dynamic response = googleSearch(searchOptions);
 
             dynamic results = response.responseData.results;
             foreach (dynamic item in results) {</diff>
      <filename>Samples/GoogleSearchSample.cs</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ namespace Application {
 
             dynamic searchOptions = new JsonObject();
             searchOptions.Query = &quot;seattle&quot;;
-            dynamic response = liveSearch.search(searchOptions);
+            dynamic response = liveSearch(searchOptions);
 
             dynamic results = response.SearchResponse.Web.Results;
             foreach (dynamic item in results) {</diff>
      <filename>Samples/LiveSearchSample.cs</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8d17c112c6fa98ac2c0096be5bd11ccbd83a6770</id>
    </parent>
  </parents>
  <author>
    <name>NikhilK</name>
    <email>nikhilk@live.com</email>
  </author>
  <url>http://github.com/NikhilK/dynamicrest/commit/a93707ae9513c4f12e5d37062e6d2888d4d6fd86</url>
  <id>a93707ae9513c4f12e5d37062e6d2888d4d6fd86</id>
  <committed-date>2008-11-14T20:48:47-08:00</committed-date>
  <authored-date>2008-11-14T20:48:47-08:00</authored-date>
  <message>Enable operation-less URIs</message>
  <tree>1b78300e1adac934635cb71cc2ba32c67e07cc7a</tree>
  <committer>
    <name>NikhilK</name>
    <email>nikhilk@live.com</email>
  </committer>
</commit>
