<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1031083463115071586</id><updated>2012-02-17T17:29:06.960+11:00</updated><category term='ubiquitous computing'/><category term='Relational Database'/><category term='java'/><category term='cloud computing'/><category term='REST'/><category term='Utilization'/><category term='Multitenancy'/><category term='maven'/><category term='Amazon Web Service'/><category term='Database Migration'/><category term='Windows Azure Stroage'/><category term='Experience'/><category term='cloud monitor'/><category term='pervasive computing'/><category term='Google App Engine'/><category term='C#'/><category term='SOAP'/><category term='Netbeans'/><category term='Registration'/><category term='ruby on rails'/><category term='evaluation'/><category term='stateful'/><category term='WCF'/><category term='sdk'/><category term='Previous Zip file didn`t contain the command i use in Powershell. Now i have put them in.'/><category term='Input Endpoint'/><category term='stateless'/><category term='Worker Role'/><category term='version control'/><category term='.net service bus'/><category term='.Net ServiceBus'/><category term='IT Management'/><category term='Home Automation'/><category term='EC2'/><category term='Azure Table Storage'/><category term='Microsoft Windows Azure'/><title type='text'>Cloudy Shrimpy</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-5451829818766435591</id><published>2012-01-30T18:45:00.000+11:00</published><updated>2012-01-30T18:45:39.556+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Stroage'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Windows Azure Storage Mapper</title><content type='html'>Open source project: &lt;a href="http://azuredbmapper.codeplex.com/"&gt;http://azuredbmapper.codeplex.com/&lt;/a&gt;&lt;br /&gt;The StorageClient library API is not that easy while you try to understand how the REST API is working for you.&lt;br /&gt;&lt;br /&gt;Here I created an Azure Storage Mapper, which is purelly expose the REST API.&lt;br /&gt;All what you read from MSDN about REST API, you will find it in&amp;nbsp;Azure Storage Mapper.&lt;br /&gt;Same wording, same way to use. Give you the very native feeling of Azure Storage.&lt;br /&gt;&lt;br /&gt;Right now only support Table Storage... Blob Storage and Queue Storage is coming soon ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-5451829818766435591?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/5451829818766435591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2012/01/windows-azure-storage-mapper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5451829818766435591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5451829818766435591'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2012/01/windows-azure-storage-mapper.html' title='Windows Azure Storage Mapper'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-2537503857404729349</id><published>2010-12-10T18:19:00.003+11:00</published><updated>2010-12-18T21:54:03.411+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>How to run Ruby On Rails on Google AppEngine</title><content type='html'>There is a tutorial &lt;a href="https://gist.github.com/671792"&gt;https://gist.github.com/671792&lt;/a&gt; by John Woodell,&lt;br /&gt;however it was costumed running in linux environment,&lt;br /&gt;and there is some slightly changes they didnt update their tutorial script,&lt;br /&gt;the script will not work out of box, &lt;br /&gt;So in here i am making a post, especially benefit users who is using Windows, since i am doing this in Windows 7 environment.&lt;br /&gt;&lt;br /&gt;PS : i assume u have already had a google app engine account, if u dont, do some bing or google and get one &lt;br /&gt;&lt;br /&gt;Specially thanks for the help from Andrew Myers.&lt;br /&gt;&lt;br /&gt;1) Install Java Development Kit&amp;nbsp; 6 (JDK6)&lt;br /&gt;make sure you have similar stuff show up in your windows command prompt&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;gt;java -version&lt;br /&gt;java version "1.6.0_21"&lt;br /&gt;Java(TM) SE Runtime Environment (build 1.6.0_21-b07)&lt;br /&gt;Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)&lt;br /&gt;&amp;gt;javac -version&lt;br /&gt;javac 1.6.0_21&lt;/blockquote&gt;&lt;br /&gt;2)&amp;nbsp; Install AppEngine Java SDK &lt;a href="http://code.google.com/appengine/downloads.html"&gt;http://code.google.com/appengine/downloads.html&lt;/a&gt;&lt;br /&gt;Download the&amp;nbsp; SDK, and make sure you put the "bin" directory into your system "Path"&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_bdbrftBHp4Q/TQHDLqHxgjI/AAAAAAAAB24/0TGf2MmFwZQ/s1600/APP_ENGINE_PATH.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/TQHDLqHxgjI/AAAAAAAAB24/0TGf2MmFwZQ/s1600/APP_ENGINE_PATH.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Install Ruby 1.8.7 , not JRuby&lt;br /&gt;Download it &lt;a href="http://www.ruby-lang.org/en/downloads/"&gt;http://www.ruby-lang.org/en/downloads/&lt;/a&gt;, and install it,&lt;br /&gt;make sure you associate *.rb to be run by ruby&amp;nbsp; (for windows install, there is the check box)&lt;br /&gt;&lt;br /&gt;again open a new command prompt, you should have something like this&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;gt;ruby -v&lt;br /&gt;ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]&lt;br /&gt;&amp;gt;gem -v&lt;br /&gt;1.3.7&lt;/blockquote&gt;&lt;br /&gt;4) Install plugins for ruby&lt;br /&gt;Make sure you open a command prompt as administrator&lt;br /&gt;&lt;br /&gt;and type in the following one by one&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;gem install google-appengine&lt;br /&gt;&lt;pre&gt;gem install rails -v "2.3.10"&lt;/pre&gt;&lt;pre&gt;gem install rails_dm_datastore&lt;/pre&gt;&lt;pre&gt;gem install activerecord-nulldb-adapter&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;each one will take a while, so be patient..&lt;br /&gt;&lt;br /&gt;5) Make a directory to contain you ROR application&lt;br /&gt;&lt;blockquote&gt;mkdir railsv1&lt;br /&gt;cd railsv1&lt;/blockquote&gt;Or you can use GUI to do it.&lt;br /&gt;&lt;br /&gt;6) Copy the code below, save it to a file, for example rails2310_appengine.rb&lt;br /&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;#&lt;br /&gt;# Copyright:: Copyright 2009 Google Inc.&lt;br /&gt;# Original Author:: John Woodell (mailto:woodie@google.com)&lt;br /&gt;#&lt;br /&gt;# Licensed under the Apache License, Version 2.0 (the "License");&lt;br /&gt;# you may not use this file except in compliance with the License.&lt;br /&gt;# You may obtain a copy of the License at&lt;br /&gt;#&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;#&lt;br /&gt;# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;# distributed under the License is distributed on an "AS IS" BASIS,&lt;br /&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;# See the License for the specific language governing permissions and&lt;br /&gt;# limitations under the License.&lt;br /&gt;&lt;br /&gt;require 'fileutils'&lt;br /&gt;require 'open-uri'&lt;br /&gt;&lt;br /&gt;def composite(source, fragment, index = nil, trim = nil)&lt;br /&gt;&amp;nbsp; File.open(source, 'r+') do |f|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = f.readlines&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = lines[0..trim] unless trim.nil?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.pos = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File.open(fragment) do |z|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; section = z.readlines&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index and index.size &amp;lt; lines.size&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.print lines[0,index] + section + lines[index..-1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.print lines + section&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.truncate(f.pos)&lt;br /&gt;&amp;nbsp; end &lt;br /&gt;&amp;nbsp; FileUtils.rm fragment&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def download_file(path, url)&lt;br /&gt;&amp;nbsp; open(url) do |r|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileUtils.mkpath(File.dirname(path))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; open(path,"w"){|f| f.write(r.read) }&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;end&lt;br /&gt;SET_CMD = RUBY_PLATFORM.include?('mswin32') ? 'set' : 'export'&lt;br /&gt;MORE_GEMS = 'rails_appengine/active_support_vendored'&lt;br /&gt;FILE_BASE = 'http://appengine-jruby.googlecode.com/hg/demos/rails2/'&lt;br /&gt;MOD_FILES = %w{ app/controllers/rails/info_controller.rb public/favicon.ico&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config.ru config/boot_rb config/environment_rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; config/initializers/gae_init_patch.rb config/database.yml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script/console.sh script/publish.sh script/server.sh }&lt;br /&gt;# Install Rails 2.3.10&lt;br /&gt;FileUtils.touch 'config.ru'&lt;br /&gt;gemsrc = ARGV[0].eql?('tiny_ds') ? 'Gemfile_td' : 'Gemfile'&lt;br /&gt;download_file("Gemfile", "#{FILE_BASE}#{gemsrc}")&lt;br /&gt;download_file("gems_2310", "#{FILE_BASE}gems_2310")&lt;br /&gt;composite('Gemfile', 'gems_2310', nil, -2)&lt;br /&gt;FileUtils.mkdir_p 'WEB-INF'&lt;br /&gt;download_file("WEB-INF/app.yaml", "#{FILE_BASE}WEB-INF/app.yaml")&lt;br /&gt;system 'appcfg.rb bundle --update .'&lt;br /&gt;# Remove dups and generate Rails app&lt;br /&gt;# Generate rails, and skip APIs to escape the shell&lt;br /&gt;system "rails _2.3.10_ ."&lt;br /&gt;# Fetch configuration files&lt;br /&gt;FileUtils.mkdir_p 'app/controllers/rails'&lt;br /&gt;MOD_FILES.each { |path| download_file(path, "#{FILE_BASE}#{path}") }&lt;br /&gt;if ARGV[0].eql? 'tiny_ds'&lt;br /&gt;&amp;nbsp; download_file("config/environment_rb", "#{FILE_BASE}config/environment_td")&lt;br /&gt;end&lt;br /&gt;# Merge configs into boot.rb&lt;br /&gt;composite('config/boot.rb', 'config/boot_rb', 108)&lt;br /&gt;# Merge configs into environment.rb&lt;br /&gt;composite('config/environment.rb', 'config/environment_rb', 30)&lt;br /&gt;# install the nulldb adapter&lt;br /&gt;system 'ruby script/plugin install http://svn.avdi.org/nulldb/trunk/'&lt;br /&gt;puts "##"&lt;br /&gt;puts "## Now type 'dev_appserver.rb .'" &lt;br /&gt;puts "##"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and run it, e.g&amp;nbsp; ruby rails2310_appengine.rb, then you should see something like this:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;railsv1&amp;gt;ruby rails2310_appengine.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exists&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/controllers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/helpers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/models&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/views/layouts&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/locales&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; db&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; doc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; lib&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; lib/tasks&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/images&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/stylesheets&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/fixtures&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/functional&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/integration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/performance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/unit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; vendor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; vendor/plugins&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/sessions&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/sockets&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/cache&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; tmp/pids&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; Rakefile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; README&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/controllers/application_controller.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; app/helpers/application_helper.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/database.yml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/routes.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/locales/en.yml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; db/seeds.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/backtrace_silencers.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/inflections.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/mime_types.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/new_rails_defaults.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/session_store.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/initializers/cookie_verification_secret.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environment.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/boot.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/production.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/development.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; config/environments/test.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/about&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/console&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/dbconsole&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/destroy&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/generate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/runner&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/server&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/plugin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance/benchmarker&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; script/performance/profiler&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/test_helper.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; test/performance/browsing_test.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/404.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/422.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/500.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/index.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/favicon.ico&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/robots.txt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/images/rails.png&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/prototype.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/effects.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/dragdrop.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/controls.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; public/javascripts/application.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; doc/README_FOR_APP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/server.log&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/production.log&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/development.log&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create&amp;nbsp; log/test.log&lt;br /&gt;+ ./LICENSE&lt;br /&gt;+ ./README&lt;br /&gt;+ ./Rakefile&lt;br /&gt;+ ./init.rb&lt;br /&gt;+ ./lib/active_record/connection_adapters/nulldb_adapter.rb&lt;br /&gt;+ ./lib/nulldb_rspec.rb&lt;br /&gt;+ ./spec/nulldb_spec.rb&lt;br /&gt;+ ./tasks/database.rake&lt;br /&gt;##&lt;br /&gt;## Now type 'dev_appserver.rb .'&lt;br /&gt;##&lt;br /&gt;&lt;br /&gt;7) Great, we are almost there, type 'dev_appserver.rb .'&amp;nbsp; to your command prompt&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;railsv1&amp;gt;dev_appserver.rb .&lt;br /&gt;=&amp;gt; Bundling gems&lt;br /&gt;Calculating dependencies...&lt;br /&gt;Updating source: http://gems.rubyforge.org&lt;br /&gt;d:/Ruby187/lib/ruby/gems/1.8/gems/bundler08-0.8.5/lib/bundler08/resolver.rb:115:Warning: Gem::Dependency#version_require&lt;br /&gt;ments is deprecated and will be removed on or after August 2010.&amp;nbsp; Use #requirement&lt;br /&gt;Caching: actionmailer-2.3.10.gem&lt;br /&gt;Caching: actionpack-2.3.10.gem&lt;br /&gt;Caching: activerecord-2.3.10.gem&lt;br /&gt;Caching: activeresource-2.3.10.gem&lt;br /&gt;Caching: activesupport-2.3.10.gem&lt;br /&gt;Downloading addressable-2.2.2.gem&lt;br /&gt;Caching: appengine-apis-0.0.22.gem&lt;br /&gt;Caching: appengine-rack-0.0.12.gem&lt;br /&gt;Downloading bouncy-castle-java-1.5.0145.2.gem&lt;br /&gt;Downloading dm-appengine-0.1.3.gem&lt;br /&gt;Downloading dm-ar-finders-1.0.2.gem&lt;br /&gt;Downloading dm-core-1.0.2.gem&lt;br /&gt;Downloading dm-timestamps-1.0.2.gem&lt;br /&gt;Downloading dm-validations-1.0.2.gem&lt;br /&gt;Downloading extlib-0.9.15.gem&lt;br /&gt;Caching: jruby-jars-1.5.6.gem&lt;br /&gt;Downloading jruby-openssl-0.7.2.gem&lt;br /&gt;Caching: jruby-rack-1.0.4.gem&lt;br /&gt;Downloading lexidecimal-0.0.1.gem&lt;br /&gt;Caching: rack-1.1.0.gem&lt;br /&gt;Caching: rails-2.3.10.gem&lt;br /&gt;Downloading rails_appengine-0.0.6.gem&lt;br /&gt;Downloading rails_dm_datastore-0.2.16.gem&lt;br /&gt;Caching: rake-0.8.7.gem&lt;br /&gt;Installing activesupport (2.3.10)&lt;br /&gt;Installing extlib (0.9.15)&lt;br /&gt;Installing actionmailer (2.3.10)&lt;br /&gt;Installing lexidecimal (0.0.1)&lt;br /&gt;Installing rails_appengine (0.0.6)&lt;br /&gt;Installing bouncy-castle-java (1.5.0145.2)&lt;br /&gt;Installing dm-timestamps (1.0.2)&lt;br /&gt;Installing rack (1.1.0)&lt;br /&gt;Installing actionpack (2.3.10)&lt;br /&gt;Installing jruby-jars (1.5.6)&lt;br /&gt;Installing jruby-openssl (0.7.2)&lt;br /&gt;Installing dm-validations (1.0.2)&lt;br /&gt;Installing rake (0.8.7)&lt;br /&gt;Installing addressable (2.2.2)&lt;br /&gt;Installing dm-core (1.0.2)&lt;br /&gt;Installing dm-appengine (0.1.3)&lt;br /&gt;Installing jruby-rack (1.0.4)&lt;br /&gt;Installing appengine-rack (0.0.12)&lt;br /&gt;Installing appengine-apis (0.0.22)&lt;br /&gt;Installing activerecord (2.3.10)&lt;br /&gt;Installing dm-ar-finders (1.0.2)&lt;br /&gt;Installing rails_dm_datastore (0.2.16)&lt;br /&gt;Installing activeresource (2.3.10)&lt;br /&gt;Installing rails (2.3.10)&lt;br /&gt;Done.&lt;br /&gt;=&amp;gt; Packaging gems&lt;br /&gt;=&amp;gt; Installing appengine-api-1.0-sdk-1.4.0.jar&lt;br /&gt;=&amp;gt; Installing appengine-api-labs-1.4.0.jar&lt;br /&gt;=&amp;gt; Installing appengine-rack.jar&lt;br /&gt;=&amp;gt; Installing bcmail-jdk15-145.jar&lt;br /&gt;=&amp;gt; Installing bcprov-jdk15-145.jar&lt;br /&gt;=&amp;gt; Installing jruby-core-1.5.6.jar&lt;br /&gt;=&amp;gt; Installing jruby-stdlib-1.5.6.jar&lt;br /&gt;=&amp;gt; Installing jopenssl.jar&lt;br /&gt;=&amp;gt; Installing jruby-rack-1.0.4.jar&lt;br /&gt;=&amp;gt; Booting DevAppServer&lt;br /&gt;=&amp;gt; Press Ctrl-C to shutdown server&lt;br /&gt;10/12/2010 6:44:02 AM com.google.apphosting.utils.jetty.JettyLogger info&lt;br /&gt;INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger&lt;br /&gt;10/12/2010 6:44:07 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml&lt;br /&gt;INFO: Successfully processed E:\xiaomin\projects\appengine-ror\railsv1\WEB-INF/appengine-web.xml&lt;br /&gt;10/12/2010 6:44:07 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml&lt;br /&gt;INFO: Successfully processed E:\xiaomin\projects\appengine-ror\railsv1\WEB-INF/web.xml&lt;br /&gt;10/12/2010 6:44:07 AM com.google.apphosting.utils.jetty.JettyLogger info&lt;br /&gt;INFO: jetty-6.1.x&lt;br /&gt;10/12/2010 6:44:39 AM com.google.apphosting.utils.jetty.JettyLogger info&lt;br /&gt;INFO: Started SelectChannelConnector@127.0.0.1:8080&lt;br /&gt;10/12/2010 6:44:39 AM com.google.appengine.tools.development.DevAppServerImpl start&lt;br /&gt;INFO: The server is running at http://localhost:8080/&lt;/blockquote&gt;&lt;br /&gt;8) Finally, go to your browser, and enjoy yourself for your first app-engine ROR, &lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://localhost:8080/"&gt;http://localhost:8080&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;9) We are not done yet, now it is running on your local machine,&lt;br /&gt;we are just one step a way to have a app up in the cloud.&lt;br /&gt;&lt;br /&gt;Let go to your Google AppEngine account&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_bdbrftBHp4Q/TQHRhh9c0pI/AAAAAAAAB28/74X6c-UXVo0/s1600/shrimpyAppEngineAccount.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/TQHRhh9c0pI/AAAAAAAAB28/74X6c-UXVo0/s1600/shrimpyAppEngineAccount.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Copy the name of your application, in my case it is "fancyshrimpy" ... what a great name...&lt;br /&gt;&lt;br /&gt;10) Edit configure file, and put your application name attach to your app which u had just created&lt;br /&gt;&lt;br /&gt;&amp;gt;railsv1\WEB-INF\app.yaml&lt;br /&gt;at the very first line, put your application name there&amp;nbsp; (they call it application-id)&lt;br /&gt;application: fancyshrimpy&lt;br /&gt;&lt;br /&gt;11) finally type "appcfg.rb update ."&lt;br /&gt;&lt;br /&gt;you will have something like this:&lt;br /&gt;&lt;br /&gt;railsv1&amp;gt;appcfg.rb update .&lt;br /&gt;=&amp;gt; Running AppCfg&lt;br /&gt;Reading application configuration data...&lt;br /&gt;10/12/2010 5:57:00 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml&lt;br /&gt;INFO: Successfully processed .\WEB-INF/appengine-web.xml&lt;br /&gt;10/12/2010 5:57:00 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml&lt;br /&gt;INFO: Successfully processed .\WEB-INF/web.xml&lt;br /&gt;Beginning server interaction for fancyshrimpy...&lt;br /&gt;0% Creating staging directory&lt;br /&gt;5% Scanning for jsp files.&lt;br /&gt;20% Scanning files on local disk.&lt;br /&gt;25% Initiating update.&lt;br /&gt;Email: xxxxxxxx@gmail.com&lt;br /&gt;Password for xxxxxxxx@gmail.com:&lt;br /&gt;28% Cloning 7 static files.&lt;br /&gt;31% Cloning 57 application files.&lt;br /&gt;40% Uploading 6 files.&lt;br /&gt;52% Uploaded 1 files.&lt;br /&gt;61% Uploaded 2 files.&lt;br /&gt;68% Uploaded 3 files.&lt;br /&gt;73% Uploaded 4 files.&lt;br /&gt;77% Uploaded 5 files.&lt;br /&gt;80% Uploaded 6 files.&lt;br /&gt;82% Initializing precompilation...&lt;br /&gt;90% Deploying new version.&lt;br /&gt;95% Will check again in 1 seconds.&lt;br /&gt;98% Will check again in 2 seconds.&lt;br /&gt;99% Will check again in 4 seconds.&lt;br /&gt;99% Will check again in 8 seconds.&lt;br /&gt;99% Closing update: new version is ready to start serving.&lt;br /&gt;99% Uploading index definitions.&lt;br /&gt;&lt;br /&gt;Update completed successfully.&lt;br /&gt;Success.&lt;br /&gt;Cleaning up temporary files...&lt;br /&gt;&lt;br /&gt;Now the very end, go to your app and play with it...&lt;br /&gt;&lt;a href="http://fancyshrimpy.appspot.com/env.html"&gt;http://fancyshrimpy.appspot.com/env.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;End..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-2537503857404729349?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/2537503857404729349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/12/how-to-run-ruby-on-rails-on-google.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/2537503857404729349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/2537503857404729349'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/12/how-to-run-ruby-on-rails-on-google.html' title='How to run Ruby On Rails on Google AppEngine'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_bdbrftBHp4Q/TQHDLqHxgjI/AAAAAAAAB24/0TGf2MmFwZQ/s72-c/APP_ENGINE_PATH.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-8600699344190544231</id><published>2010-07-16T13:19:00.004+10:00</published><updated>2010-07-20T14:26:39.608+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubiquitous computing'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='pervasive computing'/><title type='text'>When pervasive computing meet cloud computing, Infinite VS Infinite</title><content type='html'>Recently i am trying to propose a project base on my &lt;a href="http://cloudyshrimpy.blogspot.com/2010/04/cloud-computing-it-management-home.html"&gt;previous idea&lt;/a&gt;, of course a lot more detail than the pose, for my PhD study project. Now i am crazily reading papers from all kinds of area, Internet of Things, Pervasive Computing, Cloud Computing, try to identical the research value in my project.&lt;br /&gt;&lt;br /&gt;Today just want to share some interesting finding during my reading.&lt;br /&gt;&lt;br /&gt;In one paper "Pervasive commuting a paradigm for the 21st century" by Debasbis saba and Amitava Mukberjee. In the issues and challenges they mentioned,&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Though pervasive computing components are already deployed in many environments, integrating them into a single platform is still a research problem. The problem is similar to what researchers in distributed computing face, but the scale is bigger,. As the number of devices and applications increases, integration becomes more complex. For example, servers must handle thousands of concurrent client connections, and the influx of pervasive devices would quickly approach the host`s capacities. We need a confederation of autonomous servers cooperating to provide user services."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;And as what we know from cloud computing, we can ask/rent as much as computing resource we want to deal with our need.&lt;br /&gt;&lt;br /&gt;If a auto-scale framework/model with a multi tenancy architecture application can be created base on cloud computing, sounds like the issue mention in the paper will be easily solved.&lt;br /&gt;&lt;br /&gt;And imaging if there is a standard that can build into all electric appliances, and there is a router like agent that can collect information/send control signal from/to those electric appliances, and process all these information in the multi tenancy architecture application up in the cloud, such kind of project will absolutely benefit human being a lot than we can expected&lt;br /&gt;&lt;br /&gt;More, some of the projects &lt;a href="http://www.blogger.com/"&gt;demo&lt;/a&gt; in &lt;a href="http://www.blogger.com/"&gt;Oxygen MIT&lt;/a&gt; can be easily achieve without creating any new technologies as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-8600699344190544231?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/8600699344190544231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/07/when-pervasive-computing-meet-cloud.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/8600699344190544231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/8600699344190544231'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/07/when-pervasive-computing-meet-cloud.html' title='When pervasive computing meet cloud computing, Infinite VS Infinite'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-7053727809884945798</id><published>2010-05-06T05:13:00.002+10:00</published><updated>2010-05-06T05:14:34.017+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Stroage'/><category scheme='http://www.blogger.com/atom/ns#' term='Relational Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Database Migration'/><title type='text'>Relation Decoupling  --  Migrate from Relational Database to Non Relational Cloud Database</title><content type='html'>&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Issue &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Relation decoupling problem &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;When doing the migration, there are lots of complex join/ cross table selection query, or views which implemented by such kind of query&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Possible solution:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) To migrate such kind of data, seems we need to re-model the database, get rid of the relation in the database, and move these kind of logic to be application logic (code implementation).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Similar to Ruby On Rails, they handle all the relation in coding logic, database level relation is not a must.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_bdbrftBHp4Q/S-HDFIcgopI/AAAAAAAAB0U/fApXrDUZ3MQ/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/S-HDFIcgopI/AAAAAAAAB0U/fApXrDUZ3MQ/s400/1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;2) Pre-Process relation, and keep all these result in database, when certain query come, server can return data right away.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This approach looks like some kind of data warehouse. Which might only suitable for application only do read action mostly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But it doesn`t mean we cannot do write action.&lt;br /&gt;&lt;br /&gt;We can ask the application direct request to another server which particularly&amp;nbsp; design for writing data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The only drawback is that, the result might not be able to display in a instance manner.&amp;nbsp; It depends on how agile my “Process Engine” can be.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_bdbrftBHp4Q/S-HC_HdDlHI/AAAAAAAAB0M/YuXvriyH1QE/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/S-HC_HdDlHI/AAAAAAAAB0M/YuXvriyH1QE/s400/11.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-7053727809884945798?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/7053727809884945798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/05/relation-decoupling-migrate-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7053727809884945798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7053727809884945798'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/05/relation-decoupling-migrate-from.html' title='Relation Decoupling  --  Migrate from Relational Database to Non Relational Cloud Database'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_bdbrftBHp4Q/S-HDFIcgopI/AAAAAAAAB0U/fApXrDUZ3MQ/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-4138949808264610608</id><published>2010-04-22T04:56:00.001+10:00</published><updated>2010-04-22T04:57:14.714+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multitenancy'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure Table Storage'/><title type='text'>A Peek at Multitenancy in Azure Table Stroage</title><content type='html'>As we know, the programming model for using Windows Azure Table Storage is&amp;nbsp; like the pic below&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bdbrftBHp4Q/S89GtNJsPFI/AAAAAAAABzo/1kAKAhYFvTI/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/S89GtNJsPFI/AAAAAAAABzo/1kAKAhYFvTI/s400/1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Every table can be partition base on custom Partition Key.&lt;br /&gt;If we take the advantage of the Partition Key, we can easily create a multitenancy data struture.&lt;br /&gt;&lt;br /&gt;For example, we want to create a multi user blog, just like blogger, we might have a table, call it "Posts", to store the post written by the users.&lt;br /&gt;Obviously, we can use the username as Partition Key.&lt;br /&gt;So base on the username, we can easily retrieve the corresponding set of data.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_bdbrftBHp4Q/S89HTgaAd9I/AAAAAAAABzw/hgNclrh4w74/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/S89HTgaAd9I/AAAAAAAABzw/hgNclrh4w74/s400/2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This kind of approach, data level multitenacy architecture, should be exist long time ago, but apply them onto cloud storage, will gain benefit that we cannot have in relational database.&lt;br /&gt;&lt;br /&gt;Cloud storage will guarantee all data be stored highly distributed, and fully replicated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-4138949808264610608?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/4138949808264610608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/peek-at-multitenancy-in-azure-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/4138949808264610608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/4138949808264610608'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/peek-at-multitenancy-in-azure-table.html' title='A Peek at Multitenancy in Azure Table Stroage'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_bdbrftBHp4Q/S89GtNJsPFI/AAAAAAAABzo/1kAKAhYFvTI/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-562969282805084198</id><published>2010-04-01T05:16:00.017+11:00</published><updated>2010-04-01T12:52:06.005+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='IT Management'/><title type='text'>Cloud computing + IT management  = Home Automation</title><content type='html'>I just have something in my mind that, there will be soon or already become real for some of the area, everything will be or has been able to connect internet.&lt;br /&gt;&lt;br /&gt;And when talking about IT management, usually we will think of enterprise, company or education institute, when they are up to a certain size, they need a central administration to enable them to manage all the computing device.&lt;br /&gt;&lt;br /&gt;However, people are invoke with technologies lot more than people live in the older days,&lt;br /&gt;individual or family also need there own IT management ...&lt;br /&gt;&lt;br /&gt;1) individual who want to use all his/her computer device all in one entry&lt;br /&gt;2) family to share all the resource&lt;br /&gt;&lt;br /&gt;And for sure, &lt;span class="dct-tt"&gt;nowadays we can do things like this for enterprise/companies/education institutes&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/S7OUPOm6b0I/AAAAAAAAByE/9VszLUPc8Ok/s1600/1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 294px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/S7OUPOm6b0I/AAAAAAAAByE/9VszLUPc8Ok/s400/1.png" alt="" id="BLOGGER_PHOTO_ID_5454866563016060738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Migrate all the IT manage system onto the cloud,&lt;br /&gt;instead of hosting the management system on-premises, we host it on to cloud.&lt;br /&gt;&lt;br /&gt;For IT management vendor, they no longer need to maintain the server, they just focus on how to make there management software to meet customers needs.&lt;br /&gt;&lt;br /&gt;And because the cloud can provide "pay as you go", now the IT Management vendor can also easily offer "pay as you go" for using there service.&lt;br /&gt;&lt;br /&gt;Now interesting things happened.&lt;br /&gt;The idea of office automation, home automation have been there for ages, but why still lots of the people cannot take the benefit, that is because it will be too much to buy, install and maintain the devices, software system all kind of stuff.&lt;br /&gt;&lt;br /&gt;But now all the price are going down,&lt;br /&gt;for IT management vendors, they can just create a multi-tenancy architecture IT management system.&lt;br /&gt;and i assume all digital device will be able to control via internet,&lt;br /&gt;and the multi-tenancy architecture IT management system will allow user to plug-in Printer, Fax machine, Fridge, Air Conditioner, Washing machine etc .....&lt;br /&gt;&lt;br /&gt;then something like this can be happened&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/S7Okyw6O5DI/AAAAAAAAByM/2JszxYkIiZA/s1600/2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 275px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/S7Okyw6O5DI/AAAAAAAAByM/2JszxYkIiZA/s400/2.png" alt="" id="BLOGGER_PHOTO_ID_5454884765705364530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Imaging just like nowadays mobile plan service, maybe in the future IT management vendor will also offer home device management service, let say you pay 30 bucks a month, it will allow you to have a dashboard to see how much electricity you have been consume, what are the condition of the device, and allow you to schedule or even make a work-flow to turn on and shutdown  devices etc.....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bullshit ends...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-562969282805084198?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/562969282805084198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/cloud-computing-it-management-home.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/562969282805084198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/562969282805084198'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/cloud-computing-it-management-home.html' title='Cloud computing + IT management  = Home Automation'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_bdbrftBHp4Q/S7OUPOm6b0I/AAAAAAAAByE/9VszLUPc8Ok/s72-c/1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-1125439318882193450</id><published>2010-04-01T05:12:00.006+11:00</published><updated>2010-04-01T06:49:45.661+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Stroage'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><title type='text'>A pattern for how to do monitoring on distributed, large scattered applications</title><content type='html'>Coming soon ...&lt;br /&gt;&lt;br /&gt;Real project was done, will be update once some copy right issue is done ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-1125439318882193450?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/1125439318882193450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/how-to-do-monitoring-on-distributed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/1125439318882193450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/1125439318882193450'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/04/how-to-do-monitoring-on-distributed.html' title='A pattern for how to do monitoring on distributed, large scattered applications'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-9175459361561994477</id><published>2010-02-12T09:52:00.006+11:00</published><updated>2010-02-12T10:20:49.934+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Worker Role'/><category scheme='http://www.blogger.com/atom/ns#' term='Input Endpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Service In Windows Azure Worker Role</title><content type='html'>&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;I am going to show you how to create a WCF web service which will be hosted on a worker role in Windows Azure.&lt;br /&gt;&lt;br /&gt;Before we continue, i assume you already know how to create a helloworld WCF web service, also know how to deploy application onto Windows Azure and know what is input endpoint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1 - Create a WCF Service&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When creating a WCF service, always we need to define a contract and them implement it.&lt;br /&gt;&lt;br /&gt;There is one thing i need to raise. When implementing the contract, and if you want to use any other binding rather than BasicHttpBinding, we need to specify&lt;br /&gt;[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Runtime.Serialization;&lt;br /&gt;using System.ServiceModel;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace WorkerRole1&lt;br /&gt;{&lt;br /&gt;[ServiceContract]&lt;br /&gt;public interface IMessageDeliver&lt;br /&gt;{&lt;br /&gt;  [OperationContract]&lt;br /&gt;  void DoWork(string message);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Runtime.Serialization;&lt;br /&gt;using System.ServiceModel;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using Microsoft.WindowsAzure.ServiceRuntime;&lt;br /&gt;&lt;br /&gt;namespace WorkerRole1&lt;br /&gt;{&lt;br /&gt;[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]&lt;br /&gt;public class MessageDeliver : IMessageDeliver&lt;br /&gt;{&lt;br /&gt;  public void DoWork(string message)&lt;br /&gt;  {&lt;br /&gt;      Trace.TraceInformation("{0} Receive Message - {1}.", RoleEnvironment.CurrentRoleInstance.Role.Name, message);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2 - Open a port to listen &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the ServiceDefinition.csdef, we need to define a InputEndpoint, so that the outside world can talk to our worker role.&lt;br /&gt;&lt;br /&gt;I am going to use NetTcpBinding, so i make the port as tcp. The other options you can have are http and https, which need to be match to the binding u are going to use.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/S3SQEEAwIPI/AAAAAAAAAQQ/s1cBqaL0hk4/s1600-h/Untitled.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 96px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/S3SQEEAwIPI/AAAAAAAAAQQ/s1cBqaL0hk4/s400/Untitled.png" alt="" id="BLOGGER_PHOTO_ID_5437129049613803762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3 - Combine WCF with the port we open&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ServiceHost serviceHost = new ServiceHost(typeof(MessageDeliver));&lt;br /&gt;&lt;br /&gt;NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);&lt;br /&gt;&lt;br /&gt;// define an external endpoint for client traffic&lt;br /&gt;RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MessageDeliver"];&lt;br /&gt;&lt;br /&gt;string endpoint = String.Format("net.tcp://{0}/MessageDeliver", externalEndPoint.IPEndpoint);&lt;br /&gt;&lt;br /&gt;serviceHost.AddServiceEndpoint(typeof(IMessageDeliver), binding, endpoint);&lt;br /&gt;&lt;br /&gt;serviceHost.Open();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Step 4 - Create a client to double check&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; ChannelFactory&lt;imessagedeliver&gt; cfactory = new ChannelFactory&lt;imessagedeliver&gt;(new NetTcpBinding(SecurityMode.None), "net.tcp://accountname.cloudapp.net:10080/MessageDeliver");&lt;br /&gt;&lt;br /&gt;var client = cfactory.CreateChannel();&lt;br /&gt;&lt;br /&gt;client.DoWork("hi from shrimpy");&lt;br /&gt;&lt;br /&gt;&lt;/imessagedeliver&gt;&lt;/imessagedeliver&gt;&lt;/blockquote&gt;Done !!! Have fun ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-9175459361561994477?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/9175459361561994477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/02/wcf-service-in-windows-azure-worker.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/9175459361561994477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/9175459361561994477'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2010/02/wcf-service-in-windows-azure-worker.html' title='WCF Service In Windows Azure Worker Role'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_bdbrftBHp4Q/S3SQEEAwIPI/AAAAAAAAAQQ/s1cBqaL0hk4/s72-c/Untitled.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-8956407259655872858</id><published>2009-12-15T14:00:00.008+11:00</published><updated>2010-01-09T02:50:30.303+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Previous Zip file didn`t contain the command i use in Powershell. Now i have put them in.'/><title type='text'>Auto migrate exising ASP.NET application onto Windows Azure</title><content type='html'>&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kkUolX8-czk&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/kkUolX8-czk&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jcLUHSS0Vsg&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jcLUHSS0Vsg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1cOzH79ck6E&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/1cOzH79ck6E&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Source code Package &lt;a href="http://shrimpysprojects.googlecode.com/files/AutoDeployRobot_WithCommandFile.zip"&gt;AutoDeployRobot_WithCommandFile.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this video I am going to show how to migrate a existing ASP.net Application to Windows Azure.&lt;br /&gt;&lt;br /&gt;There will be two way, 1) via application  2) via powershell script&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SOmething you need to know:&lt;br /&gt;&lt;br /&gt;We will use Azure Management API and Azure storage API for this demo.&lt;br /&gt;&lt;br /&gt;In order to pass Azure Management API authentication, we need the Subscription ID and a Self-signed X509 certificate&lt;br /&gt;&lt;br /&gt;In order to pass Azure storage API authentication, we need the Account Name and Access Key&lt;br /&gt;&lt;br /&gt;When try to do auto deploy, we have to save deployment file onto azure blob storage first, then ask Windows azure to look for the file from the storage to make the deployment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Demo 1, migrate via an application which implentment by using Azure Management API and Azure storage API&lt;br /&gt;&lt;br /&gt;1) show the existing asp.net application&lt;br /&gt;&lt;br /&gt;2) create a service definition file&lt;br /&gt;&lt;br /&gt;3) use cspack to pack the application&lt;br /&gt;&lt;br /&gt;4) upload file onto blob storage&lt;br /&gt;&lt;br /&gt;5) deployment onto windows Azure&lt;br /&gt;&lt;br /&gt;a web role "Ganda" will call the management API to deploy the application onto Azure, after that, the web role pass a message to a worker role "Ant", the worker&lt;br /&gt;&lt;br /&gt;role will keep checking the satus of the deployment, once it was deployed, the worker role will ask the deployment to run&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Demo 2, migrate via powershell script&lt;br /&gt;&lt;br /&gt;automatically do all the job from step 3 to 5 in demo 1&lt;br /&gt;&lt;br /&gt;Thank you for watching...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-8956407259655872858?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/8956407259655872858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/12/auto-migrate-exising-aspnet-application.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/8956407259655872858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/8956407259655872858'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/12/auto-migrate-exising-aspnet-application.html' title='Auto migrate exising ASP.NET application onto Windows Azure'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-288615280668323339</id><published>2009-09-28T17:30:00.012+10:00</published><updated>2009-10-11T16:13:08.814+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Utilization'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Experience'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><title type='text'>All the bad things in Amazon Web Service</title><content type='html'>Hi folks.... This article is going to list all what i experience the shit stuff from Amazon Web Service...&lt;br /&gt;&lt;br /&gt;I admit that AWS is very powerful, but you have to be convinced that nothing is perfect, they will have their down side...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) You can`t delete an instance from your list after you terminate it.&lt;br /&gt;Your instance list will keep growing, depending on the "garbage clean up" of AWS. AWS say they will delete your termination instance at later certain period of time. But when??? Only God will know.&lt;br /&gt;&lt;br /&gt;2) You can`t restart a terminated instance&lt;br /&gt;Amazon will keep billing you if you do not terminate the instance. This is painful, coz  sometime we just want to do some test setup, not really launch the server for real. Let say i want to install five piece of software into my machine, today i do two, and want to do another three tomorrow. In EC2, I cannot say turn off the computer and restart it again tomorrow. I have to pay for the extra idle time.&lt;br /&gt;&lt;br /&gt;3) It is hard to do Authentication programatically&lt;br /&gt;Either Query Approach or  SOAP Approach, Amazon do not provide detail in-depth tutorial or document to guild us developer to do the authentication.&lt;br /&gt;All we got is a simple page, to show us, we need to do URL Encoding when using Query API,  we have to attache the X509 certificate with every request we make when usning SOAP API.&lt;br /&gt;That is all....&lt;br /&gt;No wonder the opensource project &lt;a href="http://code.google.com/p/typica/"&gt;Typica  &lt;/a&gt;and &lt;a href="http://www.blogger.com/code.google.com/p/netflexity-amazonws-ec2" style="text-decoration: none; color: rgb(255, 255, 255);"&gt;Netflexity-amazonws-ec2&lt;/a&gt; is so popular in Amazon support forum....&lt;br /&gt;&lt;br /&gt;I was trying to use native Query API and SOAP API at the begining...but give up after a few hour try...i give up..coz there is no documentation..i end up reading source code from Typica and Netflexity.....so i just us Typica........so frustrated...&lt;br /&gt;&lt;br /&gt;But on the other hand..&lt;a href="http://blogs.msdn.com/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx"&gt;Microsoft Windows Azure management API &lt;/a&gt;is so easy to use.&lt;br /&gt;I learn and play straight away...&lt;br /&gt;&lt;br /&gt;4) Amazon-EC2-AMI-Tools Linux only&lt;br /&gt;This tool set, there is no support for Windows.&lt;br /&gt;Have to use third-party tools such as ElastixFox (Firefox plugin)&lt;br /&gt;&lt;br /&gt;5) Disk limitation when bundle Windows Instance (create custom windows AMI)&lt;br /&gt;The basic template we can get from Amazon is a windows 2003 server with C drive only 10G.&lt;br /&gt;And we cannot chance the size of the C drive.&lt;br /&gt;Why i keep mention the C drive, coz all custom stuff, if you do not put into C drive, when you perform bundle, only C drive will be bundle, all other data in other drivers will be ignnore.&lt;br /&gt;(Linux instance also has similar problem, all custom stuff have to put under /mnt, otherwise your own data won`t be bundled)&lt;br /&gt;Coz the work i am doing is that, i need to raise multiple instance which running the same application.&lt;br /&gt;So my solution is that, i create my own AMI, which has been config everything, when i what more, i just raise a instance from that AMI.&lt;br /&gt;But with 10G limitation, i just cannot feel satisfaction, lucky everything i need after installing into the C driver, there still 3 to 4 G space left...but i just cannot imaging...how about my application become larger?...dose it mean i have to give up using Amazon EC2???&lt;br /&gt;Anyway, i haven`t totally confirm that there is no way to walk around this limitation.&lt;br /&gt;I saw one of the post in the Amazon support forum, they say we can plug-in volumn for extra space...hmm..i am thinking, whether when create a custom AMI, we can bundle the volumn as well.&lt;br /&gt;Further investigation is needed... and i will keep update after if anything is found...&lt;br /&gt;&lt;br /&gt;To be continue ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-288615280668323339?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/288615280668323339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/09/all-bad-things-in-amazon-web-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/288615280668323339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/288615280668323339'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/09/all-bad-things-in-amazon-web-service.html' title='All the bad things in Amazon Web Service'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-1095115613054411317</id><published>2009-09-21T21:30:00.006+10:00</published><updated>2009-09-22T11:20:18.446+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><title type='text'>Time to build a version control app for Azure</title><content type='html'>&lt;h2&gt;&lt;a href="http://blogs.msdn.com/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx"&gt;Introducing the Windows Azure Service Management API&lt;/a&gt;&lt;/h2&gt;&lt;br /&gt;Azure has release its management API.&lt;br /&gt;&lt;br /&gt;Now azure has most of the stuff, but there is one thing Azure do not have.&lt;br /&gt;&lt;br /&gt;Deployment version control....&lt;br /&gt;&lt;br /&gt;If you want to down-grade your deployment,  and if your stageing deployement is not the down grade version.&lt;br /&gt;&lt;br /&gt;there is no way for you to down grade.&lt;br /&gt;&lt;br /&gt;Since the management API has been release....it is time for version control now....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Blueprint&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Feature:&lt;br /&gt;1) Do not store any user information&lt;br /&gt;2) Store data in user`s storage&lt;br /&gt;&lt;br /&gt;Howto Implement:&lt;br /&gt;1) The Version Control App(VCA) is a web portal&lt;br /&gt;3) When user come to VCA, user need to provide keys, subscritionID etc,&lt;br /&gt;for VCA to access SQL Azure or Table Stroage, in order to store version info, to access Blob storage, in order to storage deployment files.&lt;br /&gt;4) VCA is only a graphical  interface. But behind the scene, some logic were applied to organize those data, in order to provide version control. And for sure, VCA will invoke Azure Service Management API, to help user swap deployement doing upgrade or downgrade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-1095115613054411317?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/1095115613054411317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/09/time-to-build-version-control-app-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/1095115613054411317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/1095115613054411317'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/09/time-to-build-version-control-app-for.html' title='Time to build a version control app for Azure'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-2481440986330793634</id><published>2009-08-31T16:49:00.005+10:00</published><updated>2009-09-02T15:32:44.656+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stateless'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='stateful'/><category scheme='http://www.blogger.com/atom/ns#' term='Registration'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>How to do stateful Registration  In Windows Azure when using multi instances</title><content type='html'>Microsoft Windows Azure cloud enable you to horizontally scale out your application by modified the number of instance on the fly, and the fabric controller will handler the load balance for you.&lt;br /&gt;&lt;br /&gt;But one issue is that, u cant do stateful application for this kind of scale.&lt;br /&gt;&lt;br /&gt;For example, user login.&lt;br /&gt;Normally the way we do login is that. Once the user has been successfully login, we put some of the data into session, so that our application will know the user has been login within the time out duration.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;ISSUE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;However, when multi-instance running the same piece of application, if you store info in one of those instances, the other instance wouldn`t be aware of the user has been login.&lt;br /&gt;&lt;br /&gt;Below is the  work around for using multi-instances.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/Spz_C--TESI/AAAAAAAAAOM/yQlikCuYHjs/s1600-h/register.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 190px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/Spz_C--TESI/AAAAAAAAAOM/yQlikCuYHjs/s400/register.png" alt="" id="BLOGGER_PHOTO_ID_5376452481902645538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What i am going to do is that,&lt;br /&gt;&lt;br /&gt;Web Roles:&lt;br /&gt;Every time a web role receive one request, check whether there is a login record in the table storage, if the data existed (e.g we can use the userid for RowID, if the userid existed), then see the lable "expired" for every row,&lt;br /&gt;&lt;br /&gt;if it is false, which mean the user has already login, update the label "last_visit"&lt;br /&gt;otherwise, hasn`t login, direct to login page.&lt;br /&gt;after successful login, create one entry in the table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Worker Role:&lt;br /&gt;Schedule tasks to check the session table, see whether "current_time" - "last_visit" &gt; time out&lt;br /&gt;if true, set "expired" to true, otherwise set to false.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Concerned&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;1) Data consistency&lt;br /&gt;Data might updated by one instance, but when another instance call for the same piece of data, that data might not be updated, maybe still getting the old value.&lt;br /&gt;&lt;br /&gt;2) Too much over head&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Conclusion:&lt;/span&gt;&lt;br /&gt;I think this approach is doable.&lt;br /&gt;&lt;br /&gt;For consistency, even the value we read is the old value, which mean the time out wouldn`t be the exact time as we specify. Maybe it will be a bit larger or smaller then the expected value.&lt;br /&gt;&lt;br /&gt;For over head. There is something we need to compromise, in order to have horizontal scalability.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;How about other Cloud&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I only want to talk about Google App Engine here, coz gogrid or amazon web service, there are more likely offer "vertical scale out".&lt;br /&gt;&lt;br /&gt;In Google App Engine, they already offer user the MEM-Cache, which can be shared by all the instances. And the access time or speed is fast.&lt;br /&gt;&lt;br /&gt;Which mean it would be easy and simple to implement my approach in Google App Engine.&lt;br /&gt;And we won`t has the two concerns as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-2481440986330793634?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/2481440986330793634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/how-to-do-registration-in-windows-azure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/2481440986330793634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/2481440986330793634'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/how-to-do-registration-in-windows-azure.html' title='How to do stateful Registration  In Windows Azure when using multi instances'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_bdbrftBHp4Q/Spz_C--TESI/AAAAAAAAAOM/yQlikCuYHjs/s72-c/register.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-7924198562090334452</id><published>2009-08-22T00:15:00.005+10:00</published><updated>2009-08-22T00:21:29.133+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evaluation'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>News about cloud computing evaluation on Microsoft Windows Azure, Google App engine, Amazon Web Service</title><content type='html'>Previously, Liang, Fei and I did a cloud evaluation project under the guidance of Professor Anna Liu.&lt;br /&gt;&lt;br /&gt;Now seems our report is going to be release to be a publish....&lt;br /&gt;&lt;br /&gt;Anna was interviewed by &lt;a href="http://www.itnews.com.au/News/153451,stress-tests-rain-on-amazons-cloud.aspx"&gt;ITNews&lt;/a&gt;，and talked some of the result from our project.&lt;br /&gt;&lt;a href="http://news.cnet.com/8301-13846_3-10314021-62.html"&gt;Cnet&lt;/a&gt; also publish a short article about Anna`s talk.&lt;br /&gt;&lt;br /&gt;Hopefully by the time our report is released, we will get some good feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-7924198562090334452?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/7924198562090334452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/news-about-cloud-computing-evaluation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7924198562090334452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7924198562090334452'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/news-about-cloud-computing-evaluation.html' title='News about cloud computing evaluation on Microsoft Windows Azure, Google App engine, Amazon Web Service'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-7883068347063301373</id><published>2009-08-14T21:40:00.003+10:00</published><updated>2009-09-29T01:26:24.371+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net service bus'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Poor .Net Service Bus Java SDk ...</title><content type='html'>In this article i am &lt;span style="font-weight: bold;"&gt;NOT &lt;/span&gt;going to show you how to do things with .Net Service Bus Java SDK.&lt;br /&gt;&lt;br /&gt;But show you some of the facts i found out from my experiments.&lt;br /&gt;(I used &lt;a href="https://metro.dev.java.net/"&gt;Metro&lt;/a&gt; to create service to connection to .Net Service Bus)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;1) Java To Java Only support SOAP 1.2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was struggling for some days, when i didn`t pay too much attention on the release notes,&lt;br /&gt;and trying to create a demo, asking java subscriber to talk to java publisher.&lt;br /&gt;&lt;br /&gt;Later my friend Liang found out that, Java SDK only support SOAP 1.2 protocal.&lt;br /&gt;&lt;br /&gt;Coz by default, metro is using SOAP 1.1.&lt;br /&gt;So when you program with metro, make sure u specify proper binding for your impl class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SOAP 1.2&lt;br /&gt;&lt;pre class="prettyprint lang-java"&gt;&lt;span class="lit"&gt;@BindingType&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;value&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"&lt;/span&gt;&lt;span class="pun"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;2) Too much overheading&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First let`s have a look how many packages would be sent if we use .Net technology to .Net technology&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SpttWWF2ewI/AAAAAAAAAN8/WcP7y-TEels/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 191px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SpttWWF2ewI/AAAAAAAAAN8/WcP7y-TEels/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5376010810851490562" border="0" /&gt;&lt;/a&gt;Start from the highlight.&lt;br /&gt;Only four package will be sent for doing one round-trip conversation.&lt;br /&gt;&lt;br /&gt;Now let have a look at the java to java (Be prepared and don`t be scared).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SptuR2J7FTI/AAAAAAAAAOE/fGB5j0VX8rI/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 292px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SptuR2J7FTI/AAAAAAAAAOE/fGB5j0VX8rI/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5376011833070785842" border="0" /&gt;&lt;/a&gt;Yep..i am not joking, the whole page, starting from the top till the end of the pic,&lt;br /&gt;it took so much to finished one round-trip conversation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-7883068347063301373?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/7883068347063301373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/pool-net-service-bus-java-sdk.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7883068347063301373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/7883068347063301373'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/pool-net-service-bus-java-sdk.html' title='Poor .Net Service Bus Java SDk ...'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_bdbrftBHp4Q/SpttWWF2ewI/AAAAAAAAAN8/WcP7y-TEels/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-197177803127502104</id><published>2009-08-14T20:14:00.010+10:00</published><updated>2009-08-17T17:40:47.161+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net service bus'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>.Net Service Bus, another proposal between java and C# in REST approach</title><content type='html'>In this tutorial i will show you how to communicate between java techology and C# technology in REST Approach&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Scenario:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A console C# application  want to provide service onto internet, so register an endpoint in the .Net Service bus, which allow people making REST request.&lt;br /&gt;&lt;br /&gt;After knowing there is a service in the .Net Service Bus, someone include such service into there java application with the help of HttpClient library.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;C# service&lt;/span&gt; :&lt;br /&gt;In this part, we are going to create a REST service provider by using WCF framework.&lt;br /&gt;&lt;br /&gt;1) Create a normal C# console project from Visual Stuido, choose what even name you like.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojvSST964I/AAAAAAAAALk/xJ01EKYpCGk/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 268px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojvSST964I/AAAAAAAAALk/xJ01EKYpCGk/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5370805653071588226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;2) Within the project, create a service contract.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojvyA_CKFI/AAAAAAAAALs/A-4gS24Hsk8/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 367px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojvyA_CKFI/AAAAAAAAALs/A-4gS24Hsk8/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5370806198176196690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sojv5YkGExI/AAAAAAAAAL0/VUWX32yDeTY/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 248px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sojv5YkGExI/AAAAAAAAAL0/VUWX32yDeTY/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5370806324764742418" border="0" /&gt;&lt;/a&gt;3) Leave the contract blank first, coz we need to import some WCF reference.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojwZu9M58I/AAAAAAAAAL8/nK8FxX0bT9o/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 310px; height: 183px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojwZu9M58I/AAAAAAAAAL8/nK8FxX0bT9o/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5370806880531441602" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojwfvjEaoI/AAAAAAAAAME/UT-evGEYwGA/s1600-h/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 339px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SojwfvjEaoI/AAAAAAAAAME/UT-evGEYwGA/s400/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5370806983769483906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;4) Now we can implement our contact with WCF annotation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SojwtEFBx5I/AAAAAAAAAMM/Bv8ygna_kPw/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 256px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SojwtEFBx5I/AAAAAAAAAMM/Bv8ygna_kPw/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5370807212618925970" border="0" /&gt;&lt;/a&gt;5) After we have the contract, it is time to do the Implementation for the contract.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SojxTLkADuI/AAAAAAAAAMU/6vD-G7HAOJM/s1600-h/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 245px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SojxTLkADuI/AAAAAAAAAMU/6vD-G7HAOJM/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5370807867462913762" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/SojxWUUaMpI/AAAAAAAAAMc/5Esh-g72460/s1600-h/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 146px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/SojxWUUaMpI/AAAAAAAAAMc/5Esh-g72460/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5370807921353044626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;6) Bravo ... After all the boring jobs above, we now can create endpoint onto .Net Service Bus.&lt;br /&gt;So here we include the Service Bus reference into our project first.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sojx8fQU42I/AAAAAAAAAMk/00WHgDlfoYY/s1600-h/9.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 335px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sojx8fQU42I/AAAAAAAAAMk/00WHgDlfoYY/s400/9.jpg" alt="" id="BLOGGER_PHOTO_ID_5370808577123738466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7) Create endpoint onto .Net Service Bus.&lt;br /&gt;This time i will do something different. If you have read my previous articles, you would find that we normally need a App.config file, however it is not a must, we can do everything in programmatical way, just the matter which way u want.&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.Collections.Generic;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.Linq;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.Text;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using Microsoft.ServiceBus;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.ServiceModel.Web;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.ServiceModel.Description;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using System.ServiceModel;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;using Microsoft.ServiceHosting.ServiceRuntime;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;namespace ProposalService&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;class Program&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;static void Main(string[] args)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Console.WriteLine("Host starting ...");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;//Console.Write("Your Solution Name: ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;string solutionName = "shrimpy";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;//Console.Write("Your Solution Password: ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;string solutionPassword = "password";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;// create the endpoint address in the solution's namespace&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Uri address = ServiceBusEnvironment.CreateServiceUri(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;"http",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;solutionName,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;"proposal");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;// create the credentials object for the endpoint&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;TransportClientEndpointBehavior userNamePasswordServiceBusCredential =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;new TransportClientEndpointBehavior();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;userNamePasswordServiceBusCredential.CredentialType =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;TransportClientCredentialType.UserNamePassword;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;userNamePasswordServiceBusCredential.Credentials.UserName.UserName =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;solutionName;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;userNamePasswordServiceBusCredential.Credentials.UserName.Password =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;solutionPassword;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;WebServiceHost host = new WebServiceHost(typeof(ProposalContractImpl), address);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;ContractDescription contractDescription =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;ContractDescription.GetContract(typeof(ProposalContract), typeof(ProposalContractImpl));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;serviceEndPoint.Address = new EndpointAddress(address);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;serviceEndPoint.Binding = new WebHttpRelayBinding();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;serviceEndPoint.Behaviors.Add(userNamePasswordServiceBusCredential);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;ServiceRegistrySettings settings = new ServiceRegistrySettings();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;settings.DiscoveryMode = DiscoveryType.Public;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;serviceEndPoint.Behaviors.Add(settings);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;host.Description.Endpoints.Add(serviceEndPoint);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;host.Open();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Console.WriteLine("Service address: " + address);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Console.ReadLine();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;host.Close();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Testing our service.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now the service is ready to go. Launch it, and go to your browser to test it.&lt;br /&gt;Theoretically, you should see something like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj0lJBU5jI/AAAAAAAAAMs/-KBMRFr3OKU/s1600-h/11.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 284px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj0lJBU5jI/AAAAAAAAAMs/-KBMRFr3OKU/s400/11.jpg" alt="" id="BLOGGER_PHOTO_ID_5370811474553136690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Still remember how our C# contract look like???&lt;br /&gt;I beg u must forget all about it...&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;[OperationContract()]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;[WebGet(UriTemplate = "/{words}")]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;string says(string words);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the contract we said that, anything follow by the link will tread as input of method "says"&lt;br /&gt;So as in the pic, if we type something following the "proposal" should trigger method "says".&lt;br /&gt;&lt;br /&gt;Let`s do it. See the location in my browser:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj5usUKJPI/AAAAAAAAAM8/Htc0Na_IGw8/s1600-h/12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 210px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj5usUKJPI/AAAAAAAAAM8/Htc0Na_IGw8/s400/12.jpg" alt="" id="BLOGGER_PHOTO_ID_5370817136204326130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And then hit enter&lt;br /&gt;&lt;br /&gt;Oooops.......&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/Soj5-VtgoiI/AAAAAAAAANE/cuNpMIqpPfA/s1600-h/13.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 200px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/Soj5-VtgoiI/AAAAAAAAANE/cuNpMIqpPfA/s400/13.jpg" alt="" id="BLOGGER_PHOTO_ID_5370817405014549026" border="0" /&gt;&lt;/a&gt;Don`t be scared, this page is from Microsoft, asking for valid login. Type in our solution name and password, it will first ask the Access Control service to do a check up, whether we have the right to get into the service on the other side. If the solution name and password are all good, it will return us a security token. For browser, the token will put into cookie, so that we can continue  to visit our service.&lt;br /&gt;&lt;br /&gt;Bingo............ we get what we expected.......&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj6wd5vEpI/AAAAAAAAANM/DJEfnwD36K4/s1600-h/14.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 128px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj6wd5vEpI/AAAAAAAAANM/DJEfnwD36K4/s400/14.jpg" alt="" id="BLOGGER_PHOTO_ID_5370818266206769810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Java RESTful subscriber&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now we have already half way to Rome. We just need to do a rest request from the java side.&lt;br /&gt;&lt;br /&gt;1) Create a empty maven project. Choose any name u want.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj7wUAXfmI/AAAAAAAAANU/xw82fTB_LzM/s1600-h/20.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 297px; height: 158px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Soj7wUAXfmI/AAAAAAAAANU/xw82fTB_LzM/s400/20.jpg" alt="" id="BLOGGER_PHOTO_ID_5370819363061857890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;2) Modify the POM, add HttpClient dependency, so that we can make REST request later.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/Soj8CewIWdI/AAAAAAAAANc/VjcbuqCqkjY/s1600-h/16.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 266px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/Soj8CewIWdI/AAAAAAAAANc/VjcbuqCqkjY/s400/16.jpg" alt="" id="BLOGGER_PHOTO_ID_5370819675184191954" border="0" /&gt;&lt;/a&gt;3) It would be good to do logging when doing coding.&lt;br /&gt;So create a folder "resources", and create log4j.properties file under the folder&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/Soj-6Zu-twI/AAAAAAAAANs/YsjC9b4o5UE/s1600-h/17.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 195px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/Soj-6Zu-twI/AAAAAAAAANs/YsjC9b4o5UE/s400/17.jpg" alt="" id="BLOGGER_PHOTO_ID_5370822834933118722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Content of log4j.properties:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: rgb(51, 102, 255);" class="brush: java"&gt;&lt;br /&gt;log4j.rootLogger=OFF, STDIO&lt;br /&gt;&lt;br /&gt;log4j.logger.org.apache.commons=ERROR&lt;br /&gt;&lt;br /&gt;log4j.logger.com.blogspot.cloudyshrimpy=DEBUG&lt;br /&gt;log4j.appender.STDIO=org.apache.log4j.ConsoleAppender&lt;br /&gt;log4j.appender.STDIO.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.STDIO.layout.ConversionPattern=%14p [Cloudy Shrimpy] %30.30F:%L| %x %m%n&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4)  So good so far, now it is time to do some real coding.&lt;br /&gt;Let think of what should we do first.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;From the white paper, it said that, in REST approach, we first need to ask for security token from Access Control Service by providing solution name and password.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;After we obtain the token, attache the token in http request header, then we can visit the REST service on the other side.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So very straight forward i will do things like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static void main(String[] args) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;   App app = new App();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;   /**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    * Get Authentication Token&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;   String security_token = app.getAuthenticationToken();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;   /**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    * Send message&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;   app.sendMessage(security_token, "Will you marry me");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then we implement method "getAuthenticationToken" and "sendMessage"&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;private void sendMessage(String token, String words) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    // replace space with '%20'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    String endpoint = String.format(SERVICE_URI, words.replaceAll(" ", "%20"));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    log.debug("Endpont is : " + endpoint);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    GetMethod get = new GetMethod(endpoint);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    get.addRequestHeader(HEADER_KEY, token);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        int status = client.executeMethod(get);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        log.debug("Request status is : " + status);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        if (status == HttpStatus.SC_OK || status == HttpStatus.SC_ACCEPTED) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            byte[] responseBody = get.getResponseBody();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            String responseContent = new String(responseBody);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            log.debug(String.format("Response is : %s", responseContent));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    } catch (Exception ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        log.error("Failed to send request to service is : " + endpoint, ex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; * https://accesscontrol.windows.net/issuetoken.aspx?u=SolutionName&amp;amp;p=SolutionPassword&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public String getAuthenticationToken() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    String token = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        String uri = String.format(ACCESS_CONTROL_LINK_TEMPLATE, USERNAME, PASSWORD);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        GetMethod get = new GetMethod(uri);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        int status = client.executeMethod(get);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        if (status == HttpStatus.SC_OK) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            byte[] responseBody = get.getResponseBody();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            token = new String(responseBody);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            log.debug(String.format("Token is : %s", token));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    } catch (Exception ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;        log.error("Failed to obtain authentication token.", ex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;    return token;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You will see lots of upper case words in my code, just because i don`t want to hardcode string. So below are all the magic strings i used.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;private static final Logger log = LoggerFactory.getLogger(App.class);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;* Solution name and password&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static final String USERNAME = "shrimpy";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static final String PASSWORD = "password";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;* Link to get security token&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static final String ACCESS_CONTROL_LINK_TEMPLATE = "https://accesscontrol.windows.net/issuetoken.aspx?u=%s&amp;amp;p=%s";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;* Target endpoint that message we are going to sent to&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static final String SERVICE_URI = "http://shrimpy.servicebus.windows.net/proposal/%s";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;* Attribute that going to be add into the http header&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public static final String HEADER_KEY = "X-MS-Identity-Token";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;* Client that use for making REST request&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;private HttpClient client = new HttpClient();&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Good now keep your C# service launching, and run your java application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SokDYh-1rWI/AAAAAAAAAN0/RkK5QVx_iAk/s1600-h/21.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 110px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SokDYh-1rWI/AAAAAAAAAN0/RkK5QVx_iAk/s400/21.jpg" alt="" id="BLOGGER_PHOTO_ID_5370827750589705570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Do u get what i got?????&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-197177803127502104?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/197177803127502104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/net-service-bus-another-proposal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/197177803127502104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/197177803127502104'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/net-service-bus-another-proposal.html' title='.Net Service Bus, another proposal between java and C# in REST approach'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_bdbrftBHp4Q/SojvSST964I/AAAAAAAAALk/xJ01EKYpCGk/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-5978065799473352135</id><published>2009-08-08T22:30:00.022+10:00</published><updated>2009-08-13T23:21:39.732+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net ServiceBus'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Big Issue in .Net Service Bus When trying to communicate between JAVA and C# technology in SOAP  approache</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;Last week i was thinking to create a tutorial to show people, how different technologies can interact by using .Net Service Bus.&lt;br /&gt;&lt;br /&gt;However after last week`s experiment, seems that, .Net Service Bus hasn`t implement such functionality yet.&lt;br /&gt;&lt;br /&gt;Ok..seeing is believing.....let me show you how i found out the fact.&lt;br /&gt;&lt;br /&gt;My source code can be download from below.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/PublisherDemoInSoapV1.rar"&gt;Publisher In C# http://shrimpysprojects.googlecode.com/files/PublisherDemoInSoapV1.rar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/DotNetServiceSubscriber.zip"&gt;Subscriber In Java http://shrimpysprojects.googlecode.com/files/DotNetServiceSubscriber.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Over View:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What i did for last week is that, i create a publisher service in C#, plugin into .Net Service Bus, then i create a java subscriber, and ask for service from the .Net Service Bus.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Part one, C# Publisher Service&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;In this service, i am going to use wsHttpRelayBinding.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Actually i had tried most of the bindings, basicHttpRelayBinding, webHttpRelayBinding and even netTcpHttpRelayBinding.&lt;br /&gt;&lt;br /&gt;Q: why TcpHttpRelayBinding&lt;br /&gt;A: 老板 also working on the same issue, try to make java communicate with C#, he try netTcp as well, i think the reason it that, when using java sdk, it only support sb as prefix.&lt;br /&gt;&lt;br /&gt;The result turn out to be that,&lt;br /&gt;with netTcp and wsHttp, i got http 500 internal error,&lt;br /&gt;with basicHttp and webHttp i got http 400 bad request error.&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Later in this artile i will show u the soap package as well.&lt;br /&gt;&lt;br /&gt;Let start to set up the project first.&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step One: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Create a normal C# console application&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Step Two:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Create interface for service contact and the impl of interface&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoP3y5Dn3xI/AAAAAAAAAJw/bJ0oJYjJBGU/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 357px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoP3y5Dn3xI/AAAAAAAAAJw/bJ0oJYjJBGU/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5369407634437299986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Step Three, App.config&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoP4YWjA09I/AAAAAAAAAJ4/eH5jQhFWhfI/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 364px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoP4YWjA09I/AAAAAAAAAJ4/eH5jQhFWhfI/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5369408278008746962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Final Step&lt;/span&gt;, Invoke service API, register the service onto .Net Service Bus&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoP6Yf9aA7I/AAAAAAAAAKI/x-tm5Zhq4FA/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 366px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoP6Yf9aA7I/AAAAAAAAAKI/x-tm5Zhq4FA/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5369410479558624178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the end, the whole project will look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoP51kzkxbI/AAAAAAAAAKA/wgKNER2kTJY/s1600-h/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 196px; height: 131px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoP51kzkxbI/AAAAAAAAAKA/wgKNER2kTJY/s400/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5369409879564142002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now right click on the project,  choose&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Debug--&gt;Start new instance &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Theoretically you are supposed to get the app up and run&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoP8HZQa3hI/AAAAAAAAAKQ/EZQfP7SPNA0/s1600-h/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 187px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoP8HZQa3hI/AAAAAAAAAKQ/EZQfP7SPNA0/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5369412384724803090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Part Two&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;, create WSDL file&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Base on the C# interface, render a set of WSDL file, so that later we can use it to create java subscriber.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;I created a WCF project, base on the contact (interface) to create the WSDL, XSD files&lt;br /&gt;&lt;br /&gt;When testing wshttpRelayBinding and netTcpRelayBinding&lt;br /&gt;the WCF project use wsHttpBing to generate WSDL, XSD file&lt;br /&gt;&lt;br /&gt;When testing basicHttpRelayBinding and webHttpRelayBinding&lt;br /&gt;the WCF project use basicHttpBinding and webHttpBinding to generate WSDL, XSD file&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Please refer to my source code .&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;The WCF project was create within the publisher project, it was a sub project.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/PublisherDemoInSoapV1.rar"&gt;Publisher In C# http://shrimpysprojects.googlecode.com/files/PublisherDemoInSoapV1.rar&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if you want the WSDL file, go into &lt;span style="font-size:100%;"&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/DotNetServiceSubscriber.zip"&gt;DotNetServiceSubscriber.zip&lt;/a&gt;,  under src/wsdl, you will find what u want.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/DotNetServiceSubscriber.zip"&gt;Subscriber In Java http://shrimpysprojects.googlecode.com/files/DotNetServiceSubscriber.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;PS: make sure you have fixed the endpoint and the url reference,&lt;br /&gt;&lt;br /&gt;e.g&lt;br /&gt;Cox i put all the wsdl and xsd file together in one folder,&lt;br /&gt;when getting the file from WCF, in some file, you will see&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;wsdl:import namespace="http://tempuri.org/" location="http://xxxxxxFileName.wsdl"&gt;&lt;/wsdl:import&gt;&lt;/span&gt;Http://xxxxxxxxxxxxfilename.wsdl&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;make sure your change it to&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;filename.wsdl&lt;wsdl:import namespace="http://tempuri.org/" location="FileName.wsdl"&gt;&lt;br /&gt;&lt;br /&gt;also, change the endpoint to&lt;br /&gt;&lt;br /&gt;sb://solutioname.servicebus.windows.net/endpointname&lt;br /&gt;&lt;br /&gt;&lt;/wsdl:import&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Part Three, create java subscriber&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Base on the WSDL file, create a subscriber to connect to .net service bus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Step one, create a .net service bus java project&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Please refer to my prevous article &lt;/span&gt;to set up a java project first.&lt;h3 class="post-title entry-title"&gt; &lt;a href="http://cloudyshrimpy.blogspot.com/2009/08/net-service-bus-maven-project-set-up.html"&gt;.Net service bus maven project set up with JavaSDK&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Step two, add "wsimport" into POM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;wsimport can easily parse WSDL and XSD file and  generate us java code&lt;br /&gt;&lt;br /&gt;Create a folder call "wsdl" under your src folder, and place all WSDL and XSD file into this folder.&lt;br /&gt;Then edit your POM file as below&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoQBawtedGI/AAAAAAAAAKY/50ne3BZKZVY/s1600-h/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 293px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoQBawtedGI/AAAAAAAAAKY/50ne3BZKZVY/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5369418214996341858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you see from above, if you build the project, extra java code will place into your src folder,&lt;br /&gt;these extra java code is the contact we can use with .Net service Bus Java SDK.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQCEgTyepI/AAAAAAAAAKg/fOgeQrdr5eU/s1600-h/9.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 392px; height: 206px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQCEgTyepI/AAAAAAAAAKg/fOgeQrdr5eU/s400/9.jpg" alt="" id="BLOGGER_PHOTO_ID_5369418932148140690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Final Step , create subscriber&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Learnt from the sample of jdotnetservice.com, i create the subscriber as below&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQDH0GjrSI/AAAAAAAAAKo/sfyL8GhIaZ8/s1600-h/9.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 220px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQDH0GjrSI/AAAAAAAAAKo/sfyL8GhIaZ8/s400/9.jpg" alt="" id="BLOGGER_PHOTO_ID_5369420088512589090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Now all the preparation have been done,&lt;br /&gt;It is time to witness .Net Service cannot allow Cross techology communicate with SOAP approache.&lt;br /&gt;&lt;br /&gt;Launch your publisher service, &lt;/span&gt; &lt;span style="font-weight: bold;"&gt;then run the java subscriber..&lt;/span&gt;&lt;/span&gt;..&lt;br /&gt;&lt;br /&gt;and you will get error information like these:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoQGc_9SbdI/AAAAAAAAAK4/vdRIz-pLUOc/s1600-h/10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 179px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/SoQGc_9SbdI/AAAAAAAAAK4/vdRIz-pLUOc/s400/10.jpg" alt="" id="BLOGGER_PHOTO_ID_5369423751007071698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;With the error info above, we don`t know what stage we had up to, so i sniffer all the package,&lt;br /&gt;you can see from the pic below, we actually pass all the authentication, and find the service on the bus.&lt;br /&gt;&lt;br /&gt;However the bus failed to link the java end and C# end together.&lt;br /&gt;&lt;br /&gt;Q : WHY i can say that???&lt;br /&gt;A: Because my C# code hasn`t get invoke yet...all the error happened before getting into my C# code&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQGWhhkRRI/AAAAAAAAAKw/CGrgxXQjPaU/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 147px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQGWhhkRRI/AAAAAAAAAKw/CGrgxXQjPaU/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5369423639758521618" border="0" /&gt;&lt;/a&gt;Also from the package sniffer, we can see the fault message&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQKOQUvsLI/AAAAAAAAALI/1n0kBNrm2pw/s1600-h/fault.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 101px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQKOQUvsLI/AAAAAAAAALI/1n0kBNrm2pw/s400/fault.jpg" alt="" id="BLOGGER_PHOTO_ID_5369427895748898994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ok...let dig this problem one more step further..&lt;br /&gt;In my C# project, i also create C# subscriber, it works perfectly. so i sniffer its package as well..&lt;br /&gt;&lt;br /&gt;so now we can compare what are the difference between soap package sent out from the C# subscriber and java subscriber&lt;br /&gt;&lt;br /&gt;SOAP package from C# subscriber:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQJaBP-1TI/AAAAAAAAALA/qXhruAN7Qxs/s1600-h/11.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 307px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQJaBP-1TI/AAAAAAAAALA/qXhruAN7Qxs/s400/11.jpg" alt="" id="BLOGGER_PHOTO_ID_5369426998349190450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;SOAP package from Java subscriber when WSDL was generate from wsHttpRelayBinding:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQKcvGK_9I/AAAAAAAAALQ/-_vWTKCm_zE/s1600-h/12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 303px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SoQKcvGK_9I/AAAAAAAAALQ/-_vWTKCm_zE/s400/12.jpg" alt="" id="BLOGGER_PHOTO_ID_5369428144527441874" border="0" /&gt;&lt;/a&gt;SOAP package from Java subscriber when WSDL was generate from basicHttpRelayBinding or webHttpRelayBinding:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQLDSI1PpI/AAAAAAAAALY/PkdLG4OQTRk/s1600-h/13.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/SoQLDSI1PpI/AAAAAAAAALY/PkdLG4OQTRk/s400/13.jpg" alt="" id="BLOGGER_PHOTO_ID_5369428806768869010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We can see that, the java SDK absolutely got some problem, otherwise, the chatroom will not always be there.&lt;br /&gt;&lt;br /&gt;But this wouldn`t be the case that affect the communication, as we can see, in C# subscriber, it did not have a "from".&lt;br /&gt;&lt;br /&gt;and when comparing these three file, we can see that, java subscriber use WSDL generate from basicHttp or webHttp binding , the soap package sent out would be almost the same as the C# subscriber..&lt;br /&gt;&lt;br /&gt;But this raise a issue...&lt;br /&gt;&lt;br /&gt;For what i experience, Java SDK for .Net Service Bus only support SOAP 1.2, (Another article will be come soon, taking about limitation of .Net Service Bus java sdk. which base on my prevouse prototype work, i created a java publisher and a java subscriber, and let them talk with each other)&lt;br /&gt;&lt;br /&gt;So when creating C# publisher, we suppose to use wsHttpRelayBinding&lt;br /&gt;&lt;br /&gt;However, from the SOAP package, there are big different betweent the C#  subscriber and java subscriber which was using WSDL from wsHttp binding...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-5978065799473352135?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/5978065799473352135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/proposal-between-java-and-c-via-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5978065799473352135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5978065799473352135'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/proposal-between-java-and-c-via-net.html' title='Big Issue in .Net Service Bus When trying to communicate between JAVA and C# technology in SOAP  approache'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_bdbrftBHp4Q/SoP3y5Dn3xI/AAAAAAAAAJw/bJ0oJYjJBGU/s72-c/3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-5477878805801433940</id><published>2009-08-08T01:04:00.001+10:00</published><updated>2009-08-08T22:23:47.615+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net service bus'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>.Net service bus maven project set up with JavaSDK</title><content type='html'>I am a big fan of &lt;a href="http://maven.apache.org/"&gt;maven&lt;/a&gt;,  this article will show u how to create a maven project for the .net service bus.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://shrimpysprojects.googlecode.com/files/DotNetServiceBusSubscriber.zip"&gt;SourceCode : http://shrimpysprojects.googlecode.com/files/DotNetServiceBusSubscriber.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pre-required:&lt;br /&gt;&lt;br /&gt;You have to go to this page:&lt;br /&gt;&lt;br /&gt;http://jdotnetservices.sourceforge.net/download.html&lt;br /&gt;&lt;br /&gt;make sure u have download everything they list, and configure you machine properly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After you finishing everything listed in jdotnetservice, we can start now.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Step One: Create Empty Maven Jar Project&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/Sn1ZysqjLaI/AAAAAAAAAIc/XdvhannObW0/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 279px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/Sn1ZysqjLaI/AAAAAAAAAIc/XdvhannObW0/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5367545058413456802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I am a Netbeans IDE user, coz it provide me friendly SVN and Maven support, but u can use what ever IDE you want, or even plain comman line to create a empty maven project.&lt;br /&gt;&lt;br /&gt;I did not do any fancy stuff in here, all what i did is create a empty &lt;span style="font-weight: bold;"&gt;"Maven Quickstart Archetype"&lt;/span&gt; project.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bdbrftBHp4Q/Sn1aUJ1V17I/AAAAAAAAAIk/V_USRAHO8NU/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 273px;" src="http://1.bp.blogspot.com/_bdbrftBHp4Q/Sn1aUJ1V17I/AAAAAAAAAIk/V_USRAHO8NU/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5367545633179031474" border="0" /&gt;&lt;/a&gt;And i name my project "DotNetServiceBusSubscriber". The name here is trivia, just because my following tutorial is going to illustrate how to use java application to connect to a C# application via .Net Service Bus, and my C# application is a publisher (coming soon ... :P ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Step two: Change source version&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Sn1blladYYI/AAAAAAAAAIs/YTpOsFf7WKg/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 394px; height: 400px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Sn1blladYYI/AAAAAAAAAIs/YTpOsFf7WKg/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5367547032151875970" border="0" /&gt;&lt;/a&gt;By default, maven project is using java source version 1.3, we need to change them to a newer version, 1.5 or 1.6. It is up to you.&lt;br /&gt;&lt;br /&gt;Right click on the project, choose Properties.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1b5gug0eI/AAAAAAAAAI0/T9julaIWzrg/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 287px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1b5gug0eI/AAAAAAAAAI0/T9julaIWzrg/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5367547374491193826" border="0" /&gt;&lt;/a&gt;Select "Source" from the tree in the right hand side.&lt;br /&gt;And change the source to 1.5 or 1.6.&lt;br /&gt;Here i used 1.6.&lt;br /&gt;&lt;br /&gt;Now go to your POM file, you will see someting like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1dO0Vzg3I/AAAAAAAAAI8/ayTkqMN-20A/s1600-h/4.1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 219px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1dO0Vzg3I/AAAAAAAAAI8/ayTkqMN-20A/s400/4.1.jpg" alt="" id="BLOGGER_PHOTO_ID_5367548840045151090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PS: Hey how about i am not a NetBeans user, how can i generate this???&lt;br /&gt;&lt;br /&gt;In this case, you have to manually type it into your POM file.....-_-!!!!&lt;br /&gt;&lt;build&gt;&lt;plugins&gt;&lt;plugin&gt;&lt;groupid&gt;&lt;/groupid&gt;&lt;/plugin&gt;&lt;/plugins&gt;&lt;/build&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Step three: Dependency&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I haven`t find any repository that provide ".Net Java SDK library" and all other jars that we need. So i decide to do all these by myself.&lt;br /&gt;&lt;br /&gt;Speaking in the front: make sure u have download &lt;a href="https://sourceforge.net/projects/jdotnetservices/files/jdotnetservices/jdotnetservices-m3-ctp.zip"&gt;jdotnetservices-m3-ctp.zip&lt;/a&gt; ,  and &lt;a href="https://metro.dev.java.net/1.3/"&gt;metro&lt;/a&gt;. It will be better that u download &lt;a href="https://sourceforge.net/projects/jdotnetservices/files/jdotnetservices/jdotnetservices-m3-ctp_src.zip" class="externalLink"&gt;jdotnetservices-m3-ctp_src.zip  &lt;/a&gt;as well.&lt;br /&gt;&lt;br /&gt;Edit your POM as show in the pic&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sn1fITDfpUI/AAAAAAAAAJE/PCY9DiwkLMM/s1600-h/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 273px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sn1fITDfpUI/AAAAAAAAAJE/PCY9DiwkLMM/s400/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5367550927054021954" border="0" /&gt;&lt;/a&gt;Question: why some of the jar is specified as provided and some are 'compile'&lt;br /&gt;&lt;br /&gt;Answer: coz some of the jar is in my classpath, so i said they are provided, but the others, i didn`t have them in my classpath, so set to compile.&lt;br /&gt;&lt;br /&gt;NOW comes to the key point. All the dependency i specified here are fake, so we need to manually install all these jar.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1hAxgrnqI/AAAAAAAAAJM/rpgP4Zv0QTQ/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 328px; height: 233px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/Sn1hAxgrnqI/AAAAAAAAAJM/rpgP4Zv0QTQ/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5367552996813807266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sn1hHuhC0bI/AAAAAAAAAJU/4oYkWkliy4E/s1600-h/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 226px;" src="http://4.bp.blogspot.com/_bdbrftBHp4Q/Sn1hHuhC0bI/AAAAAAAAAJU/4oYkWkliy4E/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5367553116269105586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the pic showed how to install jar for JDotNetService, which is Java SDK for .Net service bus,&lt;br /&gt;another three jar is from Metro. Do the same trick for them.&lt;br /&gt;&lt;br /&gt;And do not forget install the source for JDotNetService. With source install, you can see the source code and java doc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS: Hey, how about i do not use Netbeans????&lt;br /&gt;&lt;span class="m"&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html"&gt;Maven - Guide to installing 3rd party JARs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will help.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Final step: Do your coding&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now is time to create your own application ....have fun...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/Sn1i4aZ-SOI/AAAAAAAAAJc/Tx13rOap9ok/s1600-h/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 211px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/Sn1i4aZ-SOI/AAAAAAAAAJc/Tx13rOap9ok/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5367555052195956962" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-5477878805801433940?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/5477878805801433940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/net-service-bus-maven-project-set-up.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5477878805801433940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/5477878805801433940'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/net-service-bus-maven-project-set-up.html' title='.Net service bus maven project set up with JavaSDK'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_bdbrftBHp4Q/Sn1ZysqjLaI/AAAAAAAAAIc/XdvhannObW0/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1031083463115071586.post-894591651414663908</id><published>2009-08-03T15:55:00.000+10:00</published><updated>2009-08-08T01:07:00.672+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net service bus'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Peeking in .Net Service Bus "Router "</title><content type='html'>The pass two day, i played with the "Router" a little bit, and try to find out what the router can do for us.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_bdbrftBHp4Q/SnZ9izvDAiI/AAAAAAAAAIE/tSrdtAOxr6A/s1600-h/router.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 186px;" src="http://3.bp.blogspot.com/_bdbrftBHp4Q/SnZ9izvDAiI/AAAAAAAAAIE/tSrdtAOxr6A/s320/router.jpg" alt="" id="BLOGGER_PHOTO_ID_5365614043015086626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The pic above was quoted from the .net service bus white paper. As we can see that, Router can distribute message to a queue, a receiver or another router.&lt;br /&gt;&lt;br /&gt;Ok, time for criticism:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Cons:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(a) Messages are directed in OneWay only.&lt;br /&gt;Which means the relationship can only be One Sender --&gt; Multi Receiver,&lt;br /&gt;receiver can not interact with the sender.&lt;br /&gt;&lt;br /&gt;(b) the queue need to be specify by the receiver.&lt;br /&gt;I am a bit confusing in here as well.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_bdbrftBHp4Q/SnZ_WHyxDiI/AAAAAAAAAIM/_pqjMpsHCrM/s1600-h/router2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 147px;" src="http://2.bp.blogspot.com/_bdbrftBHp4Q/SnZ_WHyxDiI/AAAAAAAAAIM/_pqjMpsHCrM/s320/router2.jpg" alt="" id="BLOGGER_PHOTO_ID_5365616024084352546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;1&gt; I cannot see big differents or important differents between the two receiver showed in the above pic.&lt;br /&gt;I use the sample code which came alone with the .net service sdk (publisher subscriber).&lt;br /&gt;I made the publisher keep sending message. When Service B and A both launched.&lt;br /&gt;Messages displayed by Service B always random.&lt;br /&gt;for example, the sender keep sending number in acceding order e.g 1 2 3 4 5 6 7 8 9 ,&lt;br /&gt;bur what B received  would be 4 6 1 8 9 2 3 5, and B keep doing like this.&lt;br /&gt;&lt;br /&gt;The same thing happened on Service A as well, at the beginning, there is no order...&lt;br /&gt;but after a little while, we can see the message displayed by Service A would become the same order as what the sender did.&lt;br /&gt;&lt;br /&gt;but it doesn`t make sense to me, why at the beginning, Service A display stuff is out of order???&lt;br /&gt;&lt;br /&gt;&lt;2&gt; What more, the queue in the pic, didn`t act as what i expected.&lt;br /&gt;I was thinking, even though service A might down for a while, when the next time it come up again, it wouldn`t miss any message, coz the message will store in the queue.&lt;br /&gt;However, the result turn out is that, if Service A is down, the next time u come up, u can only receive the latest message, if something were sent in down time of service A, service A will just miss them.&lt;br /&gt;&lt;br /&gt;(c) We can only play with the Router in .Net Technology.&lt;br /&gt;Up till now, i have looked into both Java SDK in Jdotnetservice.com and Ruby SDK dotnetservicesruby.com&lt;br /&gt;&lt;br /&gt;Seems neither of them support router.&lt;br /&gt;And i tried to look into the REST approach of how the .Net technology can do the router thing,&lt;br /&gt;seems it is not enough information for us to do everything on our own.&lt;br /&gt;&lt;br /&gt;Maybe Microsoft should release a set of document, to show us how to connect to all its API.&lt;br /&gt;To be honest, the java sdk is so shit, and too many over head request.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Pros:&lt;/span&gt;&lt;br /&gt;(a) Sender can be down and up.&lt;br /&gt;No matter what, a sender need to create a router into the service bus first.&lt;br /&gt;After this, receiver can subscribe to the router.&lt;br /&gt;And then sender would be allow down, up what ever time it wants, as long as it come back before the time out dration, which is 1 hours by default, and can be manually specify by the sender when creating the router.&lt;br /&gt;&lt;br /&gt;(b) Receiver can ask the sender attache a secret key with all the message which is going to send to this receiver.&lt;br /&gt;When the receiver subscribe to the router, the receiver can push a key to the router, ask the router attache that key with all message which will be send to this receiver.&lt;br /&gt;&lt;br /&gt;(c) Load balance&lt;br /&gt;Router can be configured to send message to "All" or send message to "One".&lt;br /&gt;The usage of this kind of setting is that.&lt;br /&gt;&lt;br /&gt;To "ALL" which means all the subscriber will receive the message.&lt;br /&gt;&lt;br /&gt;To "One", if all the subscriber are the same set of service, either one of the service get the message from the router will do the job. In this case, the router will do the load balance job for you. The router will pick the most "Free" one, and send the message to that subscriber.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1031083463115071586-894591651414663908?l=cloudyshrimpy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudyshrimpy.blogspot.com/feeds/894591651414663908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/peeking-in-net-service-bus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/894591651414663908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1031083463115071586/posts/default/894591651414663908'/><link rel='alternate' type='text/html' href='http://cloudyshrimpy.blogspot.com/2009/08/peeking-in-net-service-bus.html' title='Peeking in .Net Service Bus &quot;Router &quot;'/><author><name>Cloudy Shrimpy</name><uri>http://www.blogger.com/profile/07182787427012065946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_bdbrftBHp4Q/S1Yw9YU0IxI/AAAAAAAAAPs/9llN4yOd4fQ/S220/me.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_bdbrftBHp4Q/SnZ9izvDAiI/AAAAAAAAAIE/tSrdtAOxr6A/s72-c/router.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
