tag:blogger.com,1999:blog-52565505536301217462024-03-13T13:27:57.535-07:00Prabath's Tech BlogAnonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.comBlogger72125tag:blogger.com,1999:blog-5256550553630121746.post-23615950337864900822016-04-26T04:51:00.001-07:002016-04-26T04:51:11.642-07:00Easy Admin Dashboard with MVC<div dir="ltr" style="text-align: left;" trbidi="on">
Today I'm going to introduce you create responsive , mobile friendly admin dashboard with MVC project.<br />
<br />
There are multiple bootstrap admin dashboard templates and one of the most commonly used and strongest one is <a href="https://github.com/almasaeed2010/AdminLTE">Admin LTE</a>. This is totally open source project.<br />
<br />
<a href="https://3.bp.blogspot.com/-J4bxeheeZGc/Vx9U4IA-ayI/AAAAAAAABBU/xYRFRcbBWMwCmt9dyo8FoEKK5Q5b_WxfACLcB/s1600/Capture.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="196" src="https://3.bp.blogspot.com/-J4bxeheeZGc/Vx9U4IA-ayI/AAAAAAAABBU/xYRFRcbBWMwCmt9dyo8FoEKK5Q5b_WxfACLcB/s400/Capture.PNG" width="400" /></a>This will provide you great UI with documentations. Click here to see <a href="https://almsaeedstudio.com/themes/AdminLTE/documentation/index.html">documentations</a>. <br /><br />This project is owned to <b><a href="https://almsaeedstudio.com/" style="color: white;"><span style="color: black;">Almsaeed
Studstudio . </span></a></b><br />
<b><span style="color: black;"></span></b><br />
<b><span style="color: black;"></span></b><br />
<b><span style="color: black;"></span></b><br />
<b><span style="color: black;"><br /></span></b><span style="color: black;">What i'm doing is removing some dependencies with 3rd party API's and make them call internally.</span><br />
<span style="color: black;"><br /></span>
<span style="color: black;"><br /></span>
<span style="color: black;"><br /></span>
<span style="color: black;"><span style="font-size: large;">Lets begin with Visual studio </span><br /><br /></span><br />
<span style="color: black;"></span><br />
<span style="color: black;">1. Start new empty MVC project </span><br />
<span style="color: black;">2. Install Nuget <a href="https://www.nuget.org/packages/Admin_Dashboard/">Admin_Dashboard</a> from nuget</span><br />
<span style="color: black;">3. Create Home empty controller and run</span><br />
<br />
<i><span style="color: black;"></span></i><br />
<i><span style="color: black;"></span></i><br />
<i><span style="color: black;">Now You are up and running this awsome template </span></i><br />
<br />
<br />
<br />
<span style="color: black;"> Then afterwards you are on your own and find the relevant UI documentations form AdminLTE and use the components. all elements automatically will found with your project <br /><br /><br />You can use this template on MVC / Angular projects using visualstudio easyly </span><br />
<span style="color: black;"><br /></span>
<span style="color: black;">**please ignore if there are some script error if it comes when installing nuget </span><br />
<span style="color: black;"><br /></span>
<span style="color: black;">Enjoy :) </span><br />
<br />
<br />
<br />
<br />
<br />
<span style="color: black;"></span><br />
<span style="color: black;"><br /><br /></span></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com1tag:blogger.com,1999:blog-5256550553630121746.post-4467748650606009442016-02-28T19:00:00.000-08:002016-02-29T20:53:43.836-08:00Mongo DB With C# API V2<div dir="ltr" style="text-align: left;" trbidi="on">
Let's start and check the latest MongoDb Driver for C# (Mongo V2).<br />
<br />
If you are not still configured your Mongo Server yet. see this <a href="https://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/">Post </a><br />
<br />
If you need some guide on old MongoDb Driver V1. See this <a href="http://prabathsl.blogspot.com/2015/03/mongodb-with-c-sharp.html">Post</a><br />
<br />
<span style="font-size: large;">New Features In V2<span style="font-size: small;"><br /></span></span><br />
<ul style="text-align: left;">
<li><span style="font-size: small;"> Async Support </span></li>
<li><span style="font-size: small;">Method Naming convention with helpful names ( SelectOne, InsertOne etc) </span></li>
<li><span style="font-size: small;">Legacy API Support </span></li>
</ul>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Here is the Db Structure and Sample Data I'm going to Use </span><br />
<br />
<span style="font-size: small;"><i> DB Structure : </i>Create Collection in Mongo Server With name of <i> </i><b>Students</b></span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: small;"><a href="https://3.bp.blogspot.com/-hD3gDsewrfU/VtPr3sNWR7I/AAAAAAAABAo/AvOxehFPR-A/s1600/mon.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-hD3gDsewrfU/VtPr3sNWR7I/AAAAAAAABAo/AvOxehFPR-A/s1600/mon.PNG" /></a></span></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Here is some sample Json Data for Students Collection <br />
<br />
/* 1 */<br />
{<br />
"_id" : ObjectId("56c3206ddaa3d39f5a130bcc"),<br />
"StudentId" : 1,<br />
"Name" : "Saman kumara",<br />
"Address" : "Sample"<br />
}<br />
<br />
/* 2 */<br />
{<br />
"_id" : ObjectId("56c69ed3926ffb2c80ed00bb"),<br />
"StudentId" : 2,<br />
"Name" : "Piyal kumara",<br />
"Address" : "adadasd"<br />
}<br />
<br />
<br />
1. Create New MVC Website from Visual Studio <br />
<br />
2. Add New Class to the models called Student<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Student</span>
{
[<span style="color: #2b91af;">BsonRepresentation</span>(<span style="color: #2b91af;">BsonType</span>.ObjectId)]
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Id { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">int</span> StudentId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Name { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Address { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
3. Install <b><i>MongoCsharpDriver</i></b> Nuget package from the Nuget<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-sJTFPBek02s/VtPtTh19LYI/AAAAAAAABA0/ao45rn3i4ww/s1600/mon.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="266" src="https://3.bp.blogspot.com/-sJTFPBek02s/VtPtTh19LYI/AAAAAAAABA0/ao45rn3i4ww/s400/mon.PNG" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4. Create <b>ConnetcionString </b>and <b>Database </b>Variables for mongodb by <i>R-click on Project -> Properties -> Settings </i>Add relevant values of variables.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-CKhf1eicXFU/VtPuFFtnxCI/AAAAAAAABA8/y6Pcon88niE/s1600/mon.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="191" src="https://1.bp.blogspot.com/-CKhf1eicXFU/VtPuFFtnxCI/AAAAAAAABA8/y6Pcon88niE/s400/mon.PNG" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5. Create DbContext Class <i>MongoDbContext </i><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MongoDbContext</span>
{
<span style="color: blue;">public</span> <span style="color: #2b91af;">IMongoDatabase</span> Database;
<span style="color: blue;">public</span> MongoDbContext()
{
<span style="color: blue;">var</span> client = <span style="color: blue;">new</span> <span style="color: #2b91af;">MongoClient</span>(<span style="color: #2b91af;">Settings</span>.Default.ConnectionString);
Database = client.GetDatabase(<span style="color: #2b91af;">Settings</span>.Default.Database);
}
<span style="color: blue;">public</span> <span style="color: #2b91af;">IMongoCollection</span><<span style="color: #2b91af;">Student</span>> Students
{
<span style="color: blue;">get</span> { <span style="color: blue;">return</span> Database.GetCollection<<span style="color: #2b91af;">Student</span>>(<span style="color: #a31515;">"Students"</span>); }
}
}</pre>
<br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">Get data From Mongo</span><br />
<br />
1. Add following code to the HomeController<br />
<u>Create Private property of Context and initialize it </u><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">private</span> <span style="color: #2b91af;">MongoDbContext</span> _context { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> HomeController()
{
_context = <span style="color: blue;">new</span> <span style="color: #2b91af;">MongoDbContext</span>();
}
<span style="color: green;">// GET: Home</span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> Index()
{
<span style="color: green;">//Get Data from Db</span>
ViewBag.Data = _context.Students.AsQueryable().Select(a=><span style="color: blue;">new</span> <span style="color: #2b91af;">Student</span> { Name=a.Name,Address=a.Address ,StudentId=a.StudentId}).ToList();
<span style="color: blue;">return</span> View();
}</pre>
<br />
2. Edit The View as following<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="background: yellow;">@{</span>
ViewBag.Title = <span style="color: #a31515;">"Index"</span>;
<span style="background: yellow;">}</span>
<span style="color: blue;"><</span><span style="color: maroon;">h2</span><span style="color: blue;">></span>Index<span style="color: blue;"></</span><span style="color: maroon;">h2</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span>Html.ActionLink(<span style="color: #a31515;">"Create"</span>, <span style="color: #a31515;">"Create"</span>)
<span style="color: blue;"><</span><span style="color: maroon;">table</span> <span style="color: red;">class</span><span style="color: blue;">=</span><span style="color: blue;">"table"</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">tr</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
Student Id
<span style="color: blue;"></</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
Name
<span style="color: blue;"></</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
Address
<span style="color: blue;"></</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: maroon;">th</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: maroon;">tr</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span><span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> stu <span style="color: blue;">in</span> ViewBag.Data)
{
<span style="color: blue;"><</span><span style="color: maroon;">tr</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span>stu.StudentId
<span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span>stu.Name
<span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span>stu.Address
<span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="background: yellow;">@</span>Html.ActionLink(<span style="color: #a31515;">"Edit"</span>, <span style="color: #a31515;">"Edit"</span>, <span style="color: blue;">new</span> { id = @stu.StudentId }) |
<span style="background: yellow;">@</span>Html.ActionLink(<span style="color: #a31515;">"Delete"</span>, <span style="color: #a31515;">"Delete"</span>, <span style="color: blue;">new</span> { id = @stu.StudentId })
<span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: maroon;">tr</span><span style="color: blue;">></span>
}
<span style="color: blue;"></</span><span style="color: maroon;">table</span><span style="color: blue;">></span></pre>
<br />
<br />
3. Run and see the result ..<br />
<br />
<span style="font-size: large;">Add Documents </span><br />
<br />
<br />
Here is sample async code for insert element to the Mongo Context<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">[<span style="color: #2b91af;">HttpPost</span>]
[<span style="color: #2b91af;">ValidateAntiForgeryToken</span>]
<span style="color: blue;">public</span> <span style="color: blue;">async</span> <span style="color: #2b91af;">Task</span><<span style="color: #2b91af;">ActionResult</span>> Create([<span style="color: #2b91af;">Bind</span>(Include = <span style="color: #a31515;">"StudentId,Name,Address"</span>)] <span style="color: #2b91af;">Student</span> student)
{
<span style="color: blue;">try</span>
{
<span style="color: green;">//Insert one item </span>
<span style="color: blue;">await</span> _context.Students.InsertOneAsync(student);
<span style="color: blue;">return</span> View();
}
<span style="color: blue;">catch</span> (<span style="color: #2b91af;">Exception</span>)
{
<span style="color: blue;">return</span> View(student);
}
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<br />
<span style="font-size: large;">Filter Elements</span><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">private</span> <span style="color: #2b91af;">Student</span> GetStudent(<span style="color: blue;">int</span> id)
{
<span style="color: green;">//Filter element</span>
<span style="color: blue;">var</span> std = _context.Students
.Find(r => r.StudentId == id)
.FirstOrDefault();
<span style="color: blue;">return</span> std;
}</pre>
<br />
<br />
<span style="font-size: large;">Update Or Replace Element </span><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">[<span style="color: #2b91af;">HttpPost</span>]
[<span style="color: #2b91af;">ValidateAntiForgeryToken</span>]
<span style="color: blue;">public</span> <span style="color: blue;">async</span> <span style="color: #2b91af;">Task</span><<span style="color: #2b91af;">ActionResult</span>> Edit([<span style="color: #2b91af;">Bind</span>(Include = <span style="color: #a31515;">"id,StudentId,Name,Address"</span>)] <span style="color: #2b91af;">Student</span> student)
{
<span style="color: green;">//Full update /replace</span>
<span style="color: green;">// await _context.Students.ReplaceOneAsync(r => r.StudentId == student.StudentId, student);</span>
<span style="color: green;">//Partial Update</span>
<span style="color: blue;">var</span> update = <span style="color: #2b91af;">Builders</span><<span style="color: #2b91af;">Student</span>>.Update.Set(s => s.Name, student.Name);
<span style="color: blue;">await</span> _context.Students.UpdateOneAsync(r => r.StudentId == student.StudentId, update);
<span style="color: blue;">return</span> RedirectToAction(<span style="color: #a31515;">"index"</span>);
}</pre>
<br />
<br />
<span style="font-size: large;">Delete element </span><br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">async</span> <span style="color: #2b91af;">Task</span><<span style="color: #2b91af;">ActionResult</span>> Delete(<span style="color: blue;">int</span> id)
{
<span style="color: green;">//Delete element </span>
<span style="color: blue;">await</span> _context.Students.DeleteOneAsync(s=> s.StudentId==id);
<span style="color: blue;">return</span> RedirectToAction(<span style="color: #a31515;">"index"</span>);
}</pre>
<br />
<br />
<br />
Full code In Git ..<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/prabathsl/MongoV2_Asp/tree/master/V2_test/Models"><img alt="https://github.com/prabathsl/DI_Sample" border="0" height="117" src="https://4.bp.blogspot.com/-ALXDj9XFKCI/Vsxc0ii_0kI/AAAAAAAABAU/GlRkJXNYRwM/s320/images.png" width="320" /></a></div>
<br />
<br />
<span style="font-size: large;"> Enjoy Coding</span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-16579948254247853362016-02-23T05:22:00.001-08:002016-02-23T05:22:51.480-08:00Dependancy Injection With Unity<div dir="ltr" style="text-align: left;" trbidi="on">
In <a href="http://prabathsl.blogspot.com/2016/01/dependency-injection-intro.html">Last post</a> I gave you introduction for dependency Injection.<br />
<br />
Here we gonna Use it in real code<br />
<br />
First I create MVC project and Add following classes to it.<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">interface</span> <span style="color: #2b91af;">IUserService</span>
{
<span style="color: blue;">string</span> GetUserName(<span style="color: blue;">string</span> name);
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">UserService</span> : <span style="color: #2b91af;">IUserService</span>
{
<span style="color: blue;">public</span> <span style="color: blue;">string</span> GetUserName(<span style="color: blue;">string</span> name)
{
<span style="color: blue;">return</span> <span style="color: blue;">string</span>.Format(<span style="color: #a31515;">"Hello {0}"</span>, name);
}
} </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"></pre>
<br />
<b>Here is my folder structure</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-yXgJ49j07po/VsxZ4Q7V8DI/AAAAAAAABAA/y__4IhTU_Kw/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-yXgJ49j07po/VsxZ4Q7V8DI/AAAAAAAABAA/y__4IhTU_Kw/s1600/Capture.PNG" /></a></div>
<br />
<span id="goog_1953198701"></span><span id="goog_1953198702"></span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Then I create My MVC <i>UserController </i>and Its View. Code is same as I did in <a href="http://prabathsl.blogspot.com/2016/01/dependency-injection-intro.html">prev</a> post<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">UserController</span> : <span style="color: #2b91af;">Controller</span>
{
<span style="color: blue;">private</span> <span style="color: #2b91af;">IUserService</span> _userService;
<span style="color: blue;">public</span> UserController(<span style="color: #2b91af;">IUserService</span> userService)
{
_userService = userService;
}
<span style="color: green;">// GET: User</span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> Index()
{
ViewBag.UserMessage = _userService.GetUserName(<span style="color: #a31515;">"Dependency Unity"</span>);
<span style="color: blue;">return</span> View();
}
}</pre>
<br />
Here is View<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="background: yellow;">@{</span>
ViewBag.Title = <span style="color: #a31515;">"Index"</span>;
<span style="background: yellow;">}</span>
<span style="color: blue;"><</span><span style="color: maroon;">h2</span><span style="color: blue;">></span><span style="background: yellow;">@</span>ViewBag.UserMessage<span style="color: blue;"></</span><span style="color: maroon;">h2</span><span style="color: blue;">></span> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
That's all. <br />
<br />
Now I'm gonna install <b><i>Unity </i></b>Nuget package for DI framework<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-sXRIOVHOGmA/VsxavnVg7-I/AAAAAAAABAI/U5kkdBULANo/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="66" src="https://3.bp.blogspot.com/-sXRIOVHOGmA/VsxavnVg7-I/AAAAAAAABAI/U5kkdBULANo/s400/Capture.PNG" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
Then real Dependency Injection begins.<br />
<br />
<span style="font-size: large;">Main Focus </span><br />
<ol style="text-align: left;">
<li><span style="font-size: small;">Register</span></li>
<li><span style="font-size: small;">Resolver </span></li>
</ol>
We use dependency Injection Register for register dependency and resolver for resolve dependency. It will be done by Unity framework for you if you implement it<br />
<br />
<br />
1. Create Class<i> DI_Register </i><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Di_Register</span>
{
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> Register And resolver of Dependency </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">void</span> RegisterDependancy()
{
<span style="color: #2b91af;">IUnityContainer</span> container = <span style="color: blue;">new</span> <span style="color: #2b91af;">UnityContainer</span>();
RegisterDependancy(container);
<span style="color: #2b91af;">DependencyResolver</span>.SetResolver(<span style="color: blue;">new</span> <span style="color: #2b91af;">UserResolver</span>(container));
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> Type registration</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">param</span><span style="color: grey;"> name</span><span style="color: grey;">=</span><span style="color: grey;">"</span>container<span style="color: grey;">"</span><span style="color: grey;">></</span><span style="color: grey;">param</span><span style="color: grey;">></span>
<span style="color: blue;">private</span> <span style="color: blue;">static</span> <span style="color: blue;">void</span> RegisterDependancy(<span style="color: #2b91af;">IUnityContainer</span> container)
{
container.RegisterType<<span style="color: #2b91af;">IUserService</span>, <span style="color: #2b91af;">UserService</span>>();
}
}</pre>
<i> </i><br />
<br />
2. Create <i>UserResolver </i>Class for dependency resolving. It will <i> </i>using the Unity's <i>IDependancyResolver </i>Interface for resolving implementation . It eill take care of your dependency resolving <br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> Resolver </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: blue;">internal</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">UserResolver</span> : <span style="color: #2b91af;">IDependencyResolver</span>
{
<span style="color: blue;">private</span> <span style="color: #2b91af;">IUnityContainer</span> _unityContainer;
<span style="color: blue;">public</span> UserResolver(<span style="color: #2b91af;">IUnityContainer</span> unityContainer)
{
_unityContainer = unityContainer;
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> For one object </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">param</span><span style="color: grey;"> name</span><span style="color: grey;">=</span><span style="color: grey;">"</span>serviceType<span style="color: grey;">"</span><span style="color: grey;">></</span><span style="color: grey;">param</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">returns</span><span style="color: grey;">></</span><span style="color: grey;">returns</span><span style="color: grey;">></span>
<span style="color: blue;">public</span> <span style="color: blue;">object</span> GetService(<span style="color: #2b91af;">Type</span> serviceType)
{
<span style="color: blue;">try</span>
{
<span style="color: blue;">return</span> _unityContainer.Resolve(serviceType);
}
<span style="color: blue;">catch</span> (<span style="color: #2b91af;">Exception</span>)
{
<span style="color: blue;">return</span> <span style="color: blue;">null</span>;
}
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> For multiple objects </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></</span><span style="color: grey;">summary</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">param</span><span style="color: grey;"> name</span><span style="color: grey;">=</span><span style="color: grey;">"</span>serviceType<span style="color: grey;">"</span><span style="color: grey;">></</span><span style="color: grey;">param</span><span style="color: grey;">></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><</span><span style="color: grey;">returns</span><span style="color: grey;">></</span><span style="color: grey;">returns</span><span style="color: grey;">></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">IEnumerable</span><<span style="color: blue;">object</span>> GetServices(<span style="color: #2b91af;">Type</span> serviceType)
{
<span style="color: blue;">try</span>
{
<span style="color: blue;">return</span> _unityContainer.ResolveAll(serviceType);
}
<span style="color: blue;">catch</span> (<span style="color: #2b91af;">Exception</span>)
{
<span style="color: blue;">return</span> <span style="color: blue;">null</span>;
}
}
}</pre>
<br />
3. Then go to the AppStart (startup.auth.cs) and call dependency register in application bigining<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: #2b91af;">Di_Register</span>.RegisterDependancy(); </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<i><br /></i><br />
<br />
<i> </i>Then Run and see the magic :)<br />
<br />
<br />
Full code In Git ..<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/prabathsl/DI_Sample"><img alt="https://github.com/prabathsl/DI_Sample" border="0" height="117" src="https://4.bp.blogspot.com/-ALXDj9XFKCI/Vsxc0ii_0kI/AAAAAAAABAU/GlRkJXNYRwM/s320/images.png" width="320" /></a></div>
<br />
<br />
<span style="font-size: large;"> Enjoy Coding</span><i> </i><br />
<br />
<br />
<i> </i><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-8001505490352919782016-01-22T05:33:00.001-08:002016-01-22T05:33:36.068-08:00Dependency Injection - Intro<div dir="ltr" style="text-align: left;" trbidi="on">
This gonna be post series which I gonna continue .. Because this is bit complex and without theoretical part hard to understand. <br />
<br />
Fist thing first.. Lets move with theoretical background of it with this post<br />
<br />
<b> Assume this scenario.. - Entire Post sequence will use this as example </b><br />
<i>There is student registration system we need to develop solution for student registration </i><br />
<br />
Here is our usual MVC code.<br />
<i> </i><br />
<i> </i><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Student</span>
{
<span style="color: blue;">public</span> <span style="color: blue;">int</span> StudentId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> StudentName { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> RegId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">int</span> Age { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">IEnumerable</span><<span style="color: #2b91af;">Student</span>> GetStudents()
{
<span style="color: blue;">return</span> <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Student</span>>();
}
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><b><i>Model Class </i></b></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><i> </i></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><i><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">StudentController</span> : <span style="color: #2b91af;">Controller</span>
{
<span style="color: blue;">private</span> <span style="color: blue;">readonly</span> <span style="color: #2b91af;">Student</span> _student;
<span style="color: blue;">public</span> StudentController()
{
_student = <span style="color: blue;">new</span> <span style="color: #2b91af;">Student</span>();
}
<span style="color: green;">// GET: /<controller>/</span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">IActionResult</span> Index()
{
<span style="color: blue;">var</span> data = _student.GetStudents();
<span style="color: blue;">return</span> View(data);
}
}</i></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><i><b>Controller Class </b></i></pre>
<i> </i><br />
<br />
In this way Model and controller is tightly coupled ( change of one class will effect other ) . This way is not good in large scale projects a importantly. ( not recommend in any case ) <br />
<br />
You can find advantages and disadvantages of tight coupled code in OOP concepts.<br />
<img alt="" height="136" src="data:image/png;base64,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" width="400" /><br />
<br />
<br />
<i> </i><br />
<i> </i><br />
<i> </i><br />
<span style="font-size: large;"><i> </i>Dependency Injection </span><br />
<span style="font-size: large;"><i> </i></span><br />
<i> </i><br />
Dependency injection is the best way to create loose coupled code and resolve dependencies among the classes .<br />
<br />
In dependency injection some other class is responsible for injecting the dependencies in to client class(ex: Student Controller) we called it <i>injector class </i>at application run time. <br />
<br />
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5256550553630121746" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5256550553630121746" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5256550553630121746" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>here is object Diagram of it <br />
<br />
<img alt="" height="145" src="data:image/png;base64,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" width="400" /><br />
<br />
<i> </i><br />
<i> </i>Here is code how its look like with DI<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Student</span>:<span style="color: #2b91af;">IStudent</span>
{
<span style="color: blue;">public</span> <span style="color: #2b91af;">IEnumerable</span><<span style="color: #2b91af;">Student</span>> GetStudents()
{
<span style="color: blue;">return</span> <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Student</span>>();
}
}
<span style="color: blue;">public</span> <span style="color: blue;">interface</span> <span style="color: #2b91af;">IStudent</span>
{
<span style="color: #2b91af;">IEnumerable</span><<span style="color: #2b91af;">Student</span>> GetStudents();
}</pre>
<i> </i><br />
<i> </i><br />
<i> </i><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">StudentController</span> : <span style="color: #2b91af;">Controller</span>
{
<span style="color: blue;">private</span> <span style="color: blue;">readonly</span> <span style="color: #2b91af;">IStudent</span> _student;
<span style="color: blue;">public</span> StudentController(<span style="color: #2b91af;">IStudent</span> student)
{
_student = student;
}
<span style="color: green;">// GET: /<controller>/</span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">IActionResult</span> Index()
{
<span style="color: blue;">var</span> data = _student.GetStudents();
<span style="color: blue;">return</span> View(data);
}
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
Enjoy Coding .. next post is on the way </div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com1tag:blogger.com,1999:blog-5256550553630121746.post-54848838012731456992016-01-21T22:22:00.001-08:002016-01-21T22:22:09.145-08:00Web API From Code (Entity frameworkk code first model) <div dir="ltr" style="text-align: left;" trbidi="on">
If you going to target mobile based applications to the small business you need to have API/web service on the hand.<br />
<br />
Today we are going to develop Web API within few minutes. <br />
<br />
Im using entity framework code first model approach here. (You can use same approach with Asp.NET web sites too) <br />
<br />
Advantages of Code first Model<br />
<ul style="text-align: left;">
<li>All handle in the code. Full control with the code </li>
<li>No need to worry about the database</li>
</ul>
<br />
Here is the scenario today im working.<br />
<br />
<i>There is DVD rental store. Which each user can get one or more movie dvd's . </i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-L0EhnLu4v9Y/VVInTBVAkNI/AAAAAAAAA9A/hgkjJamEuRU/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" src="http://1.bp.blogspot.com/-L0EhnLu4v9Y/VVInTBVAkNI/AAAAAAAAA9A/hgkjJamEuRU/s640/Capture.PNG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
1. Create Asp.NET web API project<br />
2. Then Add the following classes to it in model<br />
<br />
<b>TransactionId is auto increment </b><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> User Db Model </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">User</span>
{
<span style="color: blue;">public</span> <span style="color: #2b91af;">Guid</span> UserId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> UserName { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> NIC { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">DateTime</span> BirthDay { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: green;">//One user may have multiple transactions</span>
<span style="color: blue;">public</span> <span style="color: blue;">virtual</span> <span style="color: #2b91af;">ICollection</span><<span style="color: #2b91af;">Transaction</span>> Transactions { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">
</span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Video Db Model</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Video</span>
{
<span style="color: blue;">public</span> <span style="color: #2b91af;">Guid</span> VideoId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> VideoName { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Publisher { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: green;">//One video may have multiple transactions </span>
<span style="color: blue;">public</span> <span style="color: blue;">virtual</span> <span style="color: #2b91af;">ICollection</span><<span style="color: #2b91af;">Transaction</span>> Transactions { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
}</pre>
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Transaction db model</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Transaction</span>
{
[<span style="color: #2b91af;">DatabaseGenerated</span>(<span style="color: #2b91af;">DatabaseGeneratedOption</span>.Computed)]
<span style="color: blue;"> public</span> <span style="color: blue;">int</span> TransactionId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">Guid</span> UserId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">Guid</span> VideoId { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">DateTime</span> ReserveDate { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">DateTime</span> ReturnDate { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: green;">//Add forign key </span>
<span style="color: blue;">public</span> <span style="color: blue;">virtual</span> <span style="color: #2b91af;">Video</span> Video { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">virtual</span> <span style="color: #2b91af;">User</span> User { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">} </pre>
<br />
3. Install Entity Framework <br />
4. Create Db Context file (RentalContext)<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Database context </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">RentalContext</span>:<span style="color: #2b91af;">DbContext</span>
{
<span style="color: blue;">public</span> RentalContext():<span style="color: blue;">base</span>(<span style="color: #a31515;">"RentalContext"</span>)
{
}
<span style="color: green;">/******************Database tables ******************/</span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">DbSet</span><<span style="color: #2b91af;">User</span>> UserSet { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">DbSet</span><<span style="color: #2b91af;">Video</span>> VideoSet { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">DbSet</span><<span style="color: #2b91af;">Transaction</span>> TranactionSet { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">protected</span> <span style="color: blue;">override</span> <span style="color: blue;">void</span> OnModelCreating(<span style="color: #2b91af;">DbModelBuilder</span> modelBuilder)
{
<span style="color: blue;">base</span>.OnModelCreating(modelBuilder);
}
}</pre>
<br />
5. Then create Db initialize to change database when any changes happen with model <br />
***With few sample data<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">RentalInitilizer</span> : <span style="color: #2b91af;">DropCreateDatabaseIfModelChanges</span><<span style="color: #2b91af;">RentalContext</span>>
{
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Add sampe data to the database </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"context"</span><span style="color: grey;">></param></span>
<span style="color: blue;">protected</span> <span style="color: blue;">override</span> <span style="color: blue;">void</span> Seed(<span style="color: #2b91af;">RentalContext</span> context)
{
<span style="color: #2b91af;">List</span><<span style="color: #2b91af;">User</span>> Users = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">User</span>>()
{
<span style="color: blue;">new</span> <span style="color: #2b91af;">User</span>(){BirthDay=<span style="color: #2b91af;">Convert</span>.ToDateTime(<span style="color: #a31515;">"1990-05-03"</span>),NIC=<span style="color: #a31515;">"90563247855V"</span>,UserId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"93d82550-eefb-4b08-aab9-aa0cf8f3309f"</span>),UserName=<span style="color: #a31515;">"Dummy User1"</span>},
<span style="color: blue;">new</span> <span style="color: #2b91af;">User</span>(){BirthDay=<span style="color: #2b91af;">Convert</span>.ToDateTime(<span style="color: #a31515;">"1990-05-03"</span>),NIC=<span style="color: #a31515;">"90563247855V"</span>,UserId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"93d92550-eefb-4b08-aab9-aa0cf8f3309f"</span>),UserName=<span style="color: #a31515;">"Dummy User2"</span>},
<span style="color: blue;">new</span> <span style="color: #2b91af;">User</span>(){BirthDay=<span style="color: #2b91af;">Convert</span>.ToDateTime(<span style="color: #a31515;">"1990-05-03"</span>),NIC=<span style="color: #a31515;">"90563247855V"</span>,UserId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"93d82550-eefb-4b08-aab9-aa0cf8f3309f"</span>),UserName=<span style="color: #a31515;">"Dummy User3"</span>}
};
Users.ForEach(x => context.UserSet.Add(x));
<span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Video</span>> Videos = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Video</span>>()
{
<span style="color: blue;">new</span> <span style="color: #2b91af;">Video</span>(){Publisher=<span style="color: #a31515;">"Publisger 1"</span>,VideoId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"4fb4912c-6f7d-4d34-8fd0-9ec641ae328d"</span>), VideoName=<span style="color: #a31515;">"Video 1"</span>},
<span style="color: blue;">new</span> <span style="color: #2b91af;">Video</span>(){Publisher=<span style="color: #a31515;">"Publisger 2"</span>,VideoId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"bcfc276a-8c41-40ad-bb7b-05731dbfcce5"</span>), VideoName=<span style="color: #a31515;">"Video 2"</span>},
<span style="color: blue;">new</span> <span style="color: #2b91af;">Video</span>(){Publisher=<span style="color: #a31515;">"Publisger 3"</span>,VideoId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"6a95ce93-6b9d-4d29-9bb0-fb69e2bb53bb"</span>), VideoName=<span style="color: #a31515;">"Video 6"</span>}
};
Videos.ForEach(x => context.VideoSet.Add(x));
<span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Transaction</span>> Transactions = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">Transaction</span>>()
{
<span style="color: blue;">new</span> <span style="color: #2b91af;">Transaction</span>(){ReserveDate=<span style="color: #2b91af;">DateTime</span>.Now,ReturnDate=<span style="color: #2b91af;">DateTime</span>.Now.AddDays(5),UserId= <span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"93d82550-eefb-4b08-aab9-aa0cf8f3309f"</span>),VideoId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"6a95ce93-6b9d-4d29-9bb0-fb69e2bb53bb"</span>)},
<span style="color: blue;">new</span> <span style="color: #2b91af;">Transaction</span>(){ReserveDate=<span style="color: #2b91af;">DateTime</span>.Now,ReturnDate=<span style="color: #2b91af;">DateTime</span>.Now.AddDays(5),UserId= <span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"93d82550-eefb-4b08-aab9-aa0cf8f3309f"</span>),VideoId=<span style="color: blue;">new</span> <span style="color: #2b91af;">Guid</span>(<span style="color: #a31515;">"bcfc276a-8c41-40ad-bb7b-05731dbfcce5"</span>)}
};
Transactions.ForEach(x => context.TranactionSet.Add(x));
context.SaveChanges();
<span style="color: blue;">base</span>.Seed(context);
}
}</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"></pre>
6. Edit the config<br />
Add context to the entity framework<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">entityFramework</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">defaultConnectionFactory</span><span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework</span>"<span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">parameters</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">parameter</span><span style="color: blue;"> </span><span style="color: red;">value</span><span style="color: blue;">=</span>"<span style="color: blue;">mssqllocaldb</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">parameters</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">defaultConnectionFactory</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">providers</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">provider</span><span style="color: blue;"> </span><span style="color: red;">invariantName</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Data.SqlClient</span>"<span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">providers</span><span style="color: blue;">></span>
<span style="background-color: yellow;"><span style="color: blue;"> <</span><span style="color: #a31515;">contexts</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">context</span><span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">SEF_CodeFirst_API.Models.DbModels.RentalContext, SEF_CodeFirst_API</span>"<span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">databaseInitializer</span><span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">EF_CodeFirst_API.Models.DbModels.RentalInitializer, SEF_CodeFirst_API</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">context</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">contexts</span><span style="color: blue;">></span></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">entityFramework</span><span style="color: blue;">></span></pre>
<br />
Add the Connection string<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">connectionStrings</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">add</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">RentalContext</span>"<span style="color: blue;"> </span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span><span style="color: red;">connectionString</span><span style="color: blue;">=</span>"<span style="color: blue;">Data Source=(LocalDb)\v11.0;Initial Catalog=Rental;Integrated Security=SSPI;</span>"<span style="color: blue;"> </span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span><span style="color: red;">providerName</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Data.SqlClient</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">connectionStrings</span><span style="color: blue;">></span></pre>
<br />
<br />
Then you have to create Controller's from Entity framework with read write options.. you are in <br />
<br />
<br />
Enjoy <br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com1tag:blogger.com,1999:blog-5256550553630121746.post-70757285688984320752015-06-07T23:06:00.001-07:002015-06-08T02:23:36.762-07:00Alternative way for enable developer mode in windows 10 device<div dir="ltr" style="text-align: left;" trbidi="on">
Hi ,<br />
<br />
Have you ever seen bug when going to enabling developer mode in windows 10 preview (IP)? The application crashes.<br />
<br />
Now how we enable developer mode for application development ?<br />
<br />
There is option available. When we are deploying apps with side loading in windows 8/8.1 we are doing the policy editing to allow app installation in client machine. the same is helpfull here too <br />
<br />
Open your <b>group policy editor -> Computer Configurations-> Administrative templates -> Windows Components -> App Package development </b><br />
<br />
In there enable<br />
<b>Allow development of windows store apps and installing them from integrated development environment ..</b>.<br />
and<br />
<b>allow all trusted apps to install </b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-nYBWmCoETlg/VXUwzluXWsI/AAAAAAAAA9c/EgjgJ-O1z2o/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="364" src="http://4.bp.blogspot.com/-nYBWmCoETlg/VXUwzluXWsI/AAAAAAAAA9c/EgjgJ-O1z2o/s640/Capture.PNG" width="640" /></a></div>
<br />
<br />
<br />
You are done and enjoy <br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-41493430430165805182015-04-04T21:33:00.002-07:002015-04-05T00:17:25.130-07:00Server Socket (TCP) With Microsoft Azure<div dir="ltr" style="text-align: left;" trbidi="on">
When we working on the real time applications Microsoft azure provides the facilities to run our all kind of applications from oldest to latest technologies. With my earlier post i explained how to create SignalR applications for real time operations<br />
<br />
Today I'm gonna introduce create Server socket with the Azure .<br />
<br />
<br />
1. Create new Azure Cloud project<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/--qdOJjnYncM/VSCyLed9QlI/AAAAAAAAA8M/msfIDUXEavI/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/--qdOJjnYncM/VSCyLed9QlI/AAAAAAAAA8M/msfIDUXEavI/s1600/Capture.PNG" height="242" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2. Create new <b>Azure Worker Role </b> with the solution. I named it as <i>Socket Worker </i><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-59MOV9S5zjI/VSCym1cAfBI/AAAAAAAAA8U/ksiCiRaCixo/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-59MOV9S5zjI/VSCym1cAfBI/AAAAAAAAA8U/ksiCiRaCixo/s1600/Capture.PNG" height="230" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3. Then you need to add endpoint to Worker role. If you are working on TCP Just add TCP endpoint in the worker role as follows<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-U57i_FdsEfk/VSC0V2RXasI/AAAAAAAAA8g/bAkInjEIXJ4/s1600/Capture.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-U57i_FdsEfk/VSC0V2RXasI/AAAAAAAAA8g/bAkInjEIXJ4/s1600/Capture.PNG" height="180" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Times, Times New Roman, serif;"><span style="background-color: white; line-height: 20px;">External clients use public port to send traffic to service using </span><b style="background-color: white; line-height: 20px;">public port</b><br style="background-color: white; line-height: 20px;" /><br style="background-color: white; line-height: 20px;" /><span style="background-color: white; line-height: 20px;">actually they send traffic through this port . Here is how people send traffic http://mysitedomain:2020/</span><br style="background-color: white; line-height: 20px;" /><br style="background-color: white; line-height: 20px;" /><span style="background-color: white; line-height: 20px;">Azure load balancer send the traffic (re route the traffic to Worker Role) through the </span><b style="background-color: white; line-height: 20px;">private port</b><span style="background-color: white; line-height: 20px;"> to the Virtual Machine that run the worker role</span></span><br />
<span style="font-family: Times, Times New Roman, serif;"><span style="background-color: white; line-height: 20px;"><a href="http://www.prabathsl.com/2014/08/back-end-operations-with-cloud-service.html">(More)</a></span></span><br />
<br />
4. Then Create your regular TCP Listener (It may be UDP/TCP/Http/Https, Azure support all ) Code inside the run<br />
<br />
Replace the Run() as following with auto reset event<br />
<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: blue;">private</span> <span style="color: #2b91af;">AutoResetEvent</span> connectionWaitHandle = <span style="color: blue;">new</span> <span style="color: #2b91af;">AutoResetEvent</span>(<span style="color: blue;">false</span>);
</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: blue;">public</span> <span style="color: blue;">override</span> <span style="color: blue;">void</span> Run()
{
<span style="color: #2b91af;">TcpListener</span> listener = <span style="color: blue;">null</span>;
<span style="color: blue;">try</span>
{
<span style="color: green;">//Create TCp Listener to Listen endpoint define in the Worker Role</span>
listener = <span style="color: blue;">new</span> <span style="color: #2b91af;">TcpListener</span>(<span style="color: #2b91af;">RoleEnvironment</span>.CurrentRoleInstance.InstanceEndpoints[<span style="color: #a31515;">"TcpEndpoint"</span>].IPEndpoint);
listener.ExclusiveAddressUse = <span style="color: blue;">false</span>;
listener.Start();
}
<span style="color: blue;">catch</span> (<span style="color: #2b91af;">SocketException</span>)
{
<span style="color: #2b91af;">Trace</span>.Write(<span style="color: #a31515;">"Echo server could not start."</span>, <span style="color: #a31515;">"Error"</span>);
<span style="color: blue;">return</span>;
}
<span style="color: green;">//Listen to the all requests </span>
<span style="color: blue;">while</span> (<span style="color: blue;">true</span>)
{
<span style="color: green;">//Handle requests Asynchronously </span>
<span style="color: #2b91af;">IAsyncResult</span> result = listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
connectionWaitHandle.WaitOne();
}
}</pre>
<br />
5. Then create Async request handle with following. **All important areas are commented<br />
<br />
<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: grey;"> </span><span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: grey;">///</span><span style="color: green;"> Handle Async requests </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"result"</span><span style="color: grey;">></param></span>
<span style="color: blue;">private</span> <span style="color: blue;">void</span> HandleAsyncConnection(<span style="color: #2b91af;">IAsyncResult</span> result)
{
<span style="color: green;">// Accept connection </span>
<span style="color: #2b91af;">TcpListener</span> listener = (<span style="color: #2b91af;">TcpListener</span>)result.AsyncState;
<span style="color: #2b91af;">TcpClient</span> client = listener.EndAcceptTcpClient(result);
connectionWaitHandle.Set();
<span style="color: green;">// Setup reader/writer </span>
<span style="color: #2b91af;">NetworkStream</span> netStream = client.GetStream();
<span style="color: #2b91af;">StreamReader</span> reader = <span style="color: blue;">new</span> <span style="color: #2b91af;">StreamReader</span>(netStream);
<span style="color: green;">// Show application </span>
<span style="color: blue;">string</span> input = <span style="color: blue;">string</span>.Empty;
<span style="color: blue;">while</span> (<span style="color: blue;">true</span>)
{
<span style="color: green;">//Get the input line </span>
input = reader.ReadLine();
<span style="color: #2b91af;">Trace</span>.TraceInformation(input);
}
<span style="color: green;">// Done! </span>
client.Close();
}</pre>
<br />
Run and enjoy :)<br />
<br />
<br />
<div dir="ltr" style="background-color: white; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 20px;" trbidi="on">
<a href="http://bit.ly/SocketAzure" imageanchor="1" style="clear: left; color: #ff4f1f; float: left; margin-bottom: 1em; margin-right: 1em; outline: none;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" style="background: transparent; border: none; padding: 0px;" width="200" /></a><br />
<br />
<br />
<br />
<br />
<span style="font-size: large;">Full Code In Media Fire </span><br />
<span style="font-size: large;"><a href="http://bit.ly/SocketAzure">http://bit.ly/SocketAzure</a></span><br />
<br />
<div style="direction: ltr; margin-bottom: 0pt; margin-left: 0in; margin-top: 0pt; unicode-bidi: embed; word-break: normal;">
</div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;"><span style="font-size: x-small;"><b><br /></b></span></span></div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-26741958068256596692015-03-08T08:50:00.002-07:002015-03-08T08:50:43.029-07:00MongoDb With C Sharp <div dir="ltr" style="text-align: left;" trbidi="on">
This post is related with the post that I put few months ago, If you don't have already configured Mongodb on the machine <a href="http://www.prabathsl.com/2014/11/nodejs-web-service-with-mongodb.html">Here </a>is the post that I put <br />
<br />
Big question ?? How we use Mongo With C#? Is it hard?<br />
<br />
Its really easy to use Mongo in .NET , <br /><br />Here im going to create Asp.NET Web API project for demonstration. (You can use any type of project )<br />
<br />
Then Install official MongoDb Driver for .NET it name as <i><b>MongoCsharpDriver </b></i>Nuget package <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-vhWUFqS64qY/VPxrnX0RTYI/AAAAAAAAA7E/vBk-fifSN34/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-vhWUFqS64qY/VPxrnX0RTYI/AAAAAAAAA7E/vBk-fifSN34/s1600/Untitled.png" height="227" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Here is screenshot of my Mongo Database and document that I'm going to use<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-F79N2kHP09w/VPxsqj6Fu8I/AAAAAAAAA7Q/vw-gllWeRPM/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-F79N2kHP09w/VPxsqj6Fu8I/AAAAAAAAA7Q/vw-gllWeRPM/s1600/Untitled.png" height="164" width="640" /></a></div>
<br />
<br />Here is the class I created for mongo operations<br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">using</span> MongoDB.Bson;
<span style="color: blue;">using</span> MongoDB.Driver;
<span style="color: blue;">using</span> System;
<span style="color: blue;">using</span> System.Collections.Generic;
<span style="color: blue;">using</span> System.Linq;
<span style="color: blue;">using</span> System.Web;
<span style="color: blue;">namespace</span> MongoDb.Models.MongoModels
{
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MongoConnection</span>
{
<span style="color: blue;">private</span> <span style="color: #2b91af;">MongoServer</span> _ServerConnection { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: #2b91af;">MongoDatabase</span> _Database { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> _ConnectionString { <span style="color: blue;">get</span> { <span style="color: blue;">return</span> <span style="color: #a31515;">"Server=localhost:27017"</span>; } }
<span style="color: blue;">public</span> MongoConnection()
{
<span style="color: #2b91af;">MongoClient</span> client = <span style="color: blue;">new</span> <span style="color: #2b91af;">MongoClient</span>(_ConnectionString);
<span style="color: blue;">this</span>._ServerConnection = client.GetServer();
<span style="color: green;">////////////////////Old way of create server////////////////////</span>
<span style="color: green;">//this._ServerConnection=MongoServer.Create(_ConnectionString);</span>
<span style="color: green;">//Set the database </span>
<span style="color: blue;">this</span>._Database = _ServerConnection.GetDatabase(<span style="color: #a31515;">"DocumentOrDb"</span>);
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Get all data in the document</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><returns></returns></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">MongoCursor</span><<span style="color: #2b91af;">BsonDocument</span>> GetAllUserdata()
{
<span style="color: blue;">return</span> _Database.GetCollection<<span style="color: #2b91af;">BsonDocument</span>>(<span style="color: #a31515;">"UserDetails"</span>).FindAll();
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Insert Item</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"name"</span><span style="color: grey;">></param></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"address"</span><span style="color: grey;">></param></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><returns></returns></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">BsonDocument</span> Insert(<span style="color: blue;">string</span> name, <span style="color: blue;">string</span> address)
{
<span style="color: #2b91af;">MongoCollection</span><<span style="color: #2b91af;">BsonDocument</span>> UserDetails = _Database.GetCollection<<span style="color: #2b91af;">BsonDocument</span>>(<span style="color: #a31515;">"UserDetails"</span>);
<span style="color: #2b91af;">BsonDocument</span> NewRecord = <span style="color: blue;">new</span> <span style="color: #2b91af;">BsonDocument</span>()
{
{ <span style="color: #a31515;">"Name"</span>,name},
{<span style="color: #a31515;">"Address"</span>,address}
};
UserDetails.Insert(NewRecord);
<span style="color: green;">//return last inserted element </span>
<span style="color: blue;">return</span> UserDetails.FindAll().Last();
}
}
}</pre>
<br />
**This code is use latest standards of official mongo driver up to today <br />
Then use this class with the code. That's It<br />
<br />
Enjoy :) <br />
<br />
<br />
<br />
<br />
<br />
<a href="http://bit.ly/MongoCSharp" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" width="200" /></a><br />
<br />
<br />
<br />
<span style="font-size: x-large;">Full Code </span><br />
<span style="font-size: x-large;"><a href="http://bit.ly/MongoCSharp">http://bit.ly/MongoCSharp</a> </span></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-39268492528569472532015-03-05T08:16:00.000-08:002015-03-08T08:51:00.043-07:00First SignalR Codes<div dir="ltr" style="text-align: left;" trbidi="on">
Lets start SignalR with hands on , <br />
<br />
Not like usual chat demos in SignalR , We are going to make counter application which displays number of connected nodes to the web <br />
<br />
1. Create New empty ASP.Net web project with visual studio<br />
2. The install following Nuget on the Application<br />
<code> Microsoft.AspNet.SignalR</code> <br />
After Installing SignalR Your solution automatically get the Scripts for signal R<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-p50VrpXI1JM/VPh6e5HcNXI/AAAAAAAAA6k/tMTqteTnOj0/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-p50VrpXI1JM/VPh6e5HcNXI/AAAAAAAAA6k/tMTqteTnOj0/s1600/Untitled.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3. Add Hub Class to the solution by <b>Add </b>-> <b>New Item</b> -> <b>SignalR Hub Class(v2) </b><br />
Name it as <i>CountHub </i><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-yjmUXcL_754/VPh72GI0MHI/AAAAAAAAA6w/OCZlndaX1yg/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-yjmUXcL_754/VPh72GI0MHI/AAAAAAAAA6w/OCZlndaX1yg/s1600/Untitled.png" height="137" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4. Then Modify the <i>CountHub </i>with following code<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">[<span style="color: #2b91af;">HubName</span>(<span style="color: #a31515;">"hithub"</span>)]
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">CountHub</span> : <span style="color: #2b91af;">Hub</span>
{
<span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">int</span> count = 0;
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Once user open window with this URL hitter called </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">void</span> Hitter()
{
count++;
Clients.All.OnHit(count);
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> User disconnected OnDisconnected automatically fired </span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"stopCalled"</span><span style="color: grey;">></param></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><returns></returns></span>
<span style="color: blue;">public</span> <span style="color: blue;">override</span> System.Threading.Tasks.<span style="color: #2b91af;">Task</span> OnDisconnected(<span style="color: blue;">bool</span> stopCalled)
{
count--;
Clients.All.OnHit(count);
<span style="color: blue;">return</span> <span style="color: blue;">base</span>.OnDisconnected(stopCalled);
}
}</pre>
<br />
in here HubName attribute should be start with simple letter. Otherwise it will not working<br />
<br />
In here <b>Client.All </b>broadcast with all connected clients . <br />
<br />
5. Then add Owin Start up class to build the start up with the web application Named it as <i>StartUp</i><br />
<br />
<img alt="" height="129" src="data:image/png;base64,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//Tw37/X6/1hbGys5TzevcWbiKvbuHHjjet3BFGWEPGATYSW2/bQQw+9/fa73ulvv/3uQw891P4aawFoXcJHH1WuXr0h3nj16o2PPqp03zhH2Qk7Zr5S+pZh/ut85xv5r88Yz/xrPB0QDCAhu7fOHpPEHl9hELQen67VlvK7395/fHZh4fM7d2p37li3bi3cvDnfM+7Mzn760UeVmzfvxLXMY8fPWZbVy23uA86c+fhHP/pRPp+///7777///r/+679+44034vp6/28vs7z88X/Pfc0wDMMwvva17/7b8nK8yz92/Fz7+8wdyenTZ8VtmQ8ffv/Qod8LQvbekCX/xU//7S9++m/d/F/8+te/MZX8+te/SXzHu3lz/v7777/82XVf2v2KEkf7tt3x7EveKXqW4MV//rWwE7751Ne+9mf/cPxGh53IjeP/8GddvB1STPe7d697TNLT+AqDIMr5iHXLqs/P127fXrx+/fbly9fn5i7PzHz6ySdzPePSJ59cinGB7x06cfny5ZazXbwY50oHh/cOnbjTz3nv0ImO9plLrQj8uqLsjR3zy1/+85NPPvnkk0/+8pf/7H31xRdf9H28puj1V5TWbesZ3v25RROdyE548eKR3Q985atf/epXv/rVr3zl8f/RUXsuFvKVr/zp7kN0B+BPl7t3v/eYAx5fYRBEur6HZdUXF+/evr347q+eAgAAAAAASZTre9QXF+/Oz9euX7/97q+eqp95AQAAAAAgQY5v2bIWEBsT1afv3LEuX76OTwMAAABA4iRu0p349K1bC3Nzl/FpAAAAAEicxE26E5++eXN+ZuZTfBoAAAAAEidxk27bpxcWPr95c/6TT+bwaQAAAABInMRNGp8GAAAAgDXEkJIo8ydu0vg0AAAAAKwVhjxp+ZbETRqfBgAAAIC1gurQvfbp1dXV1dXV8Cn4NAAAAAD0KxrGp1WB7kam8WkASDc7X35waOjBbedCZzu3+76hJ55u66WDTwwNDd338jtRl9MZB58YineBHXNu933KD7CbDya9PQCQbrTVe6wqod4DAMCPd7ZtefC+LR7xddGpT7tNvbc+/ermln8Y9IadLz/odOhXNxdfjXstiX06AFhzaD4fsXuZbvp0pTobztSpmZOVi8eOn3vv0Al8GgD6goNPDG3ZvbPlKG9nPr1l97bi0NCW3TujLKfj7U/c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" width="640" /><br />
<br />
6. add Configuration for SingnalR in Startup<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">void</span> Configuration(<span style="color: #2b91af;">IAppBuilder</span> app)
{
app.MapSignalR();
}</pre>
<br />
8. Now we are done with SignaR server side coding. Lets build HTML client for SignalR<br />
Create html page in solution (default.html) and refer signalR and Jquery to the web page<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=</span><span style="color: blue;">"Scripts/jquery-1.6.4.js"</span><span style="color: blue;">></</span><span style="color: maroon;">script</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=</span><span style="color: blue;">"Scripts/jquery.signalR-2.2.0.js"</span><span style="color: blue;">></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span></pre>
9. Then add following script after it . Comments discribes the code<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">=</span><span style="color: blue;">"text/javascript"</span><span style="color: blue;">></span>
$(<span style="color: blue;">function</span> () {
<span style="color: green;">//Create hub connection </span>
<span style="color: blue;">var</span> conection = $.hubConnection();
<span style="color: green;">//create hub proxy </span>
<span style="color: blue;">var</span> hub = conection.createHubProxy(<span style="color: #a31515;">"hithub"</span>);
<span style="color: green;">//get message with the hub proxy to latest update in count </span>
hub.on(<span style="color: #a31515;">"OnHit"</span>, <span style="color: blue;">function</span> (count) {
$(<span style="color: #a31515;">'#count'</span>).text(count);
});
<span style="color: green;">//Call hitter </span>
conection.start(<span style="color: blue;">function</span>()
{
hub.invoke(<span style="color: #a31515;">'hitter'</span>)
});
})
<span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
10. Modify the body of html as follows<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: maroon;">body</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: maroon;">h2</span> <span style="color: red;">id</span><span style="color: blue;">=</span><span style="color: blue;">"count"</span><span style="color: blue;">></span>0<span style="color: blue;"></</span><span style="color: maroon;">h2</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: maroon;">body</span><span style="color: blue;">></span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span></pre>
<br />
Run and enjoy,<br />
<br />
<br />
Happy coding <br />
<br />
<br />
<br />
<a href="http://bit.ly/1G1YOze" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" width="200" /></a><br />
<br />
<br />
<br />
<span style="font-size: x-large;">Full Code </span><br />
<span style="font-size: x-large;"><a href="http://bit.ly/1G1YOze">http://bit.ly/1G1YOze</a> </span></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-65210711156803169872015-02-26T07:58:00.001-08:002015-03-19T20:08:21.978-07:00MethMvvm Visual Studio extention for C Sharp developers <div dir="ltr" style="text-align: left;" trbidi="on">
<table _mce_style="font-family: helvetica,arial; font-size: 12px; background-color: #fff; border: 1px solid #d5d5d5; border-collapse: collapse; padding: 0px; margin: 0px;" class="mceItemTable" id="content" style="background-color: white; border-collapse: collapse; border: 1px solid rgb(213, 213, 213); cursor: default; font-family: helvetica, arial; font-size: 12px; margin: 0px; padding: 0px;"><tbody>
<tr><td _mce_style="vertical-align: top; background-color: #f7f7f7; border-bottom: 1px solid #d5d5d5;" colspan="2" style="background-color: #f7f7f7; border-color: rgb(187, 187, 187) rgb(187, 187, 187) rgb(213, 213, 213); border-style: dashed dashed solid; border-width: 1px; cursor: text; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; margin: 8px; vertical-align: top;"><br /></td></tr>
<tr><td _mce_style="vertical-align: top; padding: 15px;" style="border: 1px dashed rgb(187, 187, 187); cursor: text; font-family: Verdana, Arial, Helvetica, sans-serif; margin: 8px; padding: 15px; vertical-align: top;"><div _mce_style="color: #444; font-weight: bold; margin-bottom: 15px; border-bottom: 1px dotted #d5d5d5; padding-bottom: 5px;" style="border-bottom-color: rgb(213, 213, 213); border-bottom-style: dotted; border-bottom-width: 1px; color: #444444; font-size: 10px; font-weight: bold; margin-bottom: 15px; padding-bottom: 5px;">
</div>
<ul _mce_style="color: #444; line-height: 18px;" style="font-size: 10px; line-height: 18px;">
<li style="color: #444444;"><span style="font-size: small;"><b>meth</b> - public method</span></li>
<span style="font-size: small;">
</span>
<li style="color: #444444;"><span style="font-size: small;"><b>methp</b> - private method</span></li>
<span style="font-size: small;">
</span>
<li style="text-align: justify;"><span style="font-size: small;"><b style="color: #444444;">propmvvm</b><span style="color: #444444;"> - </span><span style="color: #6c6b6b;">mvvm property</span></span></li>
</ul>
<div _mce_style="color: #444; font-weight: bold; margin-bottom: 15px; border-bottom: 1px dotted #d5d5d5; padding-bottom: 5px;" style="border-bottom-color: rgb(213, 213, 213); border-bottom-style: dotted; border-bottom-width: 1px; color: #444444; font-size: 10px; font-weight: bold; margin-bottom: 15px; padding-bottom: 5px;">
<span style="font-size: large;"> Features & Benefits</span></div>
<div _mce_style="text-align: justify; color: #6c6b6b; line-height: 18px;" style="color: #6c6b6b; line-height: 18px; text-align: justify;">
<span style="font-size: small;">This will enable you to create methods in C# easily with double tap. And also enabled to crate MVVM properties easily. to do thet you have to create PropertyChange event . as follows,</span></div>
<pre style="font-family: Verdana, Arial, Helvetica, sans-serif; margin: 8px;"><a href="https://visualstudiogallery.msdn.microsoft.com/site/view/file/155094/1/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img _mce_src="/site/view/file/155094/1/Untitled.png" border="0" height="97" id="155094" name="Untitled.png" src="https://visualstudiogallery.msdn.microsoft.com/site/view/file/155094/1/Untitled.png" style="border: 0px none;" width="594" /></a><pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><a href="https://visualstudiogallery.msdn.microsoft.com/site/view/file/155093/1/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img _mce_src="/site/view/file/155093/1/Untitled.png" border="0" height="113" id="155093" name="Untitled.png" src="https://visualstudiogallery.msdn.microsoft.com/site/view/file/155093/1/Untitled.png" style="border: 0px none;" width="547" /></a><span style="color: blue; font-size: small;">
</span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;"> </span></pre>
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; font-family: Consolas;"><span style="color: blue; font-size: small;">public</span><span style="font-size: small;"> <span style="color: blue;">event</span> <span style="color: #2b91af;">PropertyChangedEventHandler</span> PropertyChanged;
<span style="color: blue;">protected</span> <span style="color: blue;">void</span> OnPropertyChanged(<span style="color: blue;">string</span> name)
{
<span style="color: #2b91af;">PropertyChangedEventHandler</span> handler = PropertyChanged;
<span style="color: blue;">if</span> (handler != <span style="color: blue;">null</span>)
{
handler(<span style="color: blue;">this</span>, <span style="color: blue;">new</span> <span style="color: #2b91af;">PropertyChangedEventArgs</span>(name));
}
}</span></pre>
</pre>
</td><td _mce_style="vertical-align: top; padding: 15px; border-left: 1px solid #d5d5d5; width: 300px;" style="border-color: rgb(187, 187, 187) rgb(187, 187, 187) rgb(187, 187, 187) rgb(213, 213, 213); border-style: dashed dashed dashed solid; border-width: 1px; cursor: text; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; margin: 8px; padding: 15px; vertical-align: top; width: 300px;"><div _mce_style="color: #444; font-weight: bold; margin-bottom: 0px; border-bottom: 1px dotted #d5d5d5; padding-bottom: 5px; text-align: center;" style="border-bottom-color: rgb(213, 213, 213); border-bottom-style: dotted; border-bottom-width: 1px; color: #444444; font-weight: bold; padding-bottom: 5px; text-align: center;">
</div>
<div _mce_style="text-align: center;" style="text-align: center;">
</div>
<div _mce_style="text-align: center;" style="text-align: center;">
<br /></div>
<div _mce_style="text-align: center;" style="text-align: center;">
</div>
</td></tr>
<tr><td _mce_style="vertical-align: top; padding-top: 15px; padding-bottom: 15px; padding-left: 15px; padding-right: 40px; text-align: center; background-color: #f7f7f7; border-top: 1px solid #d5d5d5; color: #444; font-weight: bold;" colspan="2" style="background-color: #f7f7f7; border-color: rgb(213, 213, 213) rgb(187, 187, 187) rgb(187, 187, 187); border-style: solid dashed dashed; border-width: 1px; color: #444444; cursor: text; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; margin: 8px; padding: 15px 40px 15px 15px; text-align: center; vertical-align: top;"><span style="color: #5499d3;"><u><a href="https://methmvvm.codeplex.com/">CodePlex Project and Download Link</a></u></span></td></tr>
</tbody></table>
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-24666594581627884642015-02-06T21:57:00.001-08:002015-02-06T21:57:10.482-08:00Prism MVVM pattern with Applcaition development <div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: small;">Prism is one of the design patterns </span>which defined by <a href="http://msdn.microsoft.com/en-us/practices/bb190332">Microsoft Patterns and Practices </a>team for building <b>composite </b>Applications in C# , XAML (WPF,Store Applications etc ) .<br />
<br />
<h3 style="text-align: left;">
<span style="font-size: large;">Why MVVM is not enough ? </span></h3>
When we creating application with MVVM there is few questions and practices we need to figure out. <br />
<ul>
<li>Should I use Prism to provide support for MVVM?</li>
<li>Should I use a dependency injection container?<ul>
<li>Which dependency injection container should I use?</li>
<li>When is it appropriate to register and resolve components with a dependency injection container?</li>
<li>Should a component's lifetime be managed by the container?</li>
</ul>
</li>
<li>Should the app construct views or view models first?</li>
<li>How should I connect view models to views?<ul>
<li>Should I use XAML or code-behind to set the view's <strong>DataContext</strong> property?</li>
<li>Should I use a view model locator object?</li>
<li>Should I use an attached property to automatically connect view models to views?</li>
<li>Should I use a convention-based approach?</li>
</ul>
</li>
<li>Should I expose commands from my view models?</li>
<li>Should I use behaviors in my views?</li>
<li>Should I include design time data support in my views?</li>
<li>Do I need to support a view model hierarchy?</li>
</ul>
(reference <a href="https://msdn.microsoft.com/en-us/library/windows/apps/xx130657.aspx">https://msdn.microsoft.com/en-us/library/windows/apps/xx130657.aspx </a>)<br />
<br />
<h4 style="text-align: left;">
Why Prism?</h4>
Prism contains wire frame which can help to accelerate application development in MVVM and It already contains commonly required core features in application development.<br />
<br />
<br />
<h3 style="text-align: left;">
Let's Start Coding </h3>
<br />Here we are going to create windows store application using Prism<br />
<br />
1. Create new windows store application project (Blank application)<br />
2. Go to package manager console or manage nuget packages and install prism nuget to the application<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-WimQdRYDOkE/VNWj941KudI/AAAAAAAAA5s/qn4b1XeS5-k/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-WimQdRYDOkE/VNWj941KudI/AAAAAAAAA5s/qn4b1XeS5-k/s1600/Untitled.png" height="212" width="640" /></a></div>
<br />
3. Now starts coding . Here we are using MVVM and I create few folders to isolate resources in the project such as<br />
<ul style="text-align: left;">
<li><b>ViewModel</b> - for ViewModel</li>
<li><b>Model - </b>for Model</li>
<li><b>Controles </b>- for BaseControls </li>
<li><b>View </b>- for XAML pages </li>
<li><b>Enum </b>- for enumerations</li>
<li><b>Interfaces </b>- for Interfaces </li>
</ul>
and then put <b>MainPage.xaml </b>in to teh View Folder (drag and drop) <br />
<br />
Now my project like this<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-uCoryDScX4U/VNWlGPklLYI/AAAAAAAAA54/i-bY8gym7og/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-uCoryDScX4U/VNWlGPklLYI/AAAAAAAAA54/i-bY8gym7og/s1600/Untitled.png" height="320" width="276" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: large;"> Code for prism </span><br />
Now we have to convert our application to prism<br />
1. App.XAML and App.XAML.cs<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: #a31515;">prism</span><span style="color: blue;">:</span><span style="color: #a31515;">MvvmAppBase</span>
<span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">=</span><span style="color: blue;">"SamplePrism.App"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">prism</span><span style="color: blue;">=</span><span style="color: blue;">"using:Microsoft.Practices.Prism.Mvvm"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">local</span><span style="color: blue;">=</span><span style="color: blue;">"using:SamplePrism"</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: #a31515;">prism</span><span style="color: blue;">:</span><span style="color: #a31515;">MvvmAppBase</span><span style="color: blue;">></span> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">sealed</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">App</span> : <span style="color: #2b91af;">MvvmAppBase</span>
{
<span style="color: blue;">public</span> App()
{
<span style="color: blue;">this</span>.InitializeComponent();
}
<span style="color: blue;">protected</span> <span style="color: blue;">override</span> <span style="color: #2b91af;">Task</span> OnLaunchApplicationAsync(<span style="color: #2b91af;">LaunchActivatedEventArgs</span> args)
{</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> <span style="color: green;">//Main is the name of view i need to navigate </span>
<span style="color: blue;">this</span>.NavigationService.Navigate(<span style="color: #a31515;">"Main"</span>, <span style="color: blue;">null</span>);
<span style="color: blue;">return</span> <span style="color: #2b91af;">Task</span>.FromResult<<span style="color: blue;">object</span>>(<span style="color: blue;">null</span>);
}
} </pre>
<br />
<br />
2. Then create PageBase in controls from Prism MVVM<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">abstract</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">PageBase</span>: <span style="color: #2b91af;">Page</span>,<span style="color: #2b91af;">IView</span>
{
} </pre>
3. Then Use this page base in our Views, xaml<br />
<br /> Change MainPage.xaml and MainPage.xaml.cs as follows<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: #a31515;">controls</span><span style="color: blue;">:</span><span style="color: #a31515;">PageBase</span>
<span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">=</span><span style="color: blue;">"SamplePrism.Views.MainPage"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">prism</span><span style="color: blue;">=</span><span style="color: blue;">"using:Microsoft.Practices.Prism.Mvvm"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">controls</span><span style="color: blue;">=</span><span style="color: blue;">"using:SamplePrism.Controls"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">local</span><span style="color: blue;">=</span><span style="color: blue;">"using:SamplePrism.Views"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">d</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/expression/blend/2008"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">mc</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.openxmlformats.org/markup-compatibility/2006"</span>
<span style="color: red;"> prism</span><span style="color: blue;">:</span><span style="color: red;">ViewModelLocator.AutoWireViewModel</span><span style="color: blue;">=</span><span style="color: blue;">"True"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">designtime</span><span style="color: blue;">=</span><span style="color: blue;">"using:SamplePrism.DesignTimeViewModel"</span>
<span style="color: red;"> mc</span><span style="color: blue;">:</span><span style="color: red;">Ignorable</span><span style="color: blue;">=</span><span style="color: blue;">"d"</span><span style="color: blue;">></span>
</pre>
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">sealed</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MainPage</span> : <span style="color: #2b91af;">PageBase</span>
{
<span style="color: blue;">public</span> MainPage()
{
<span style="color: blue;">this</span>.InitializeComponent();
}
}</pre>
<br />
4. In here I'm craeting Interface to keep the properties of MainPage But this is optional. You can jsut implement the ViewModel without this interface<br />
<br />
<br />
Here is My interface<br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">interface</span> <span style="color: #2b91af;">IMainPageViewModel</span>
{
<span style="color: blue;">string</span> Title { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
}</pre>
<br /><br />5. Lets Starts MainPageViewModel<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MainPageViewModel</span> : <span style="color: #2b91af;">ViewModel</span>, <span style="color: #2b91af;">IMainPageViewModel</span>
{
<span style="color: blue;">string</span> _Title = <span style="color: blue;">default</span>(<span style="color: blue;">string</span>);
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Title { <span style="color: blue;">get</span> { <span style="color: blue;">return</span> _Title; } <span style="color: blue;">set</span> { SetProperty(<span style="color: blue;">ref</span> _Title, <span style="color: blue;">value</span>); } }
<span style="color: blue;">public</span> <span style="color: blue;">override</span> <span style="color: blue;">void</span> OnNavigatedTo(<span style="color: blue;">object</span> navigationParameter, <span style="color: #2b91af;">NavigationMode</span> navigationMode, <span style="color: #2b91af;">Dictionary</span><<span style="color: blue;">string</span>, <span style="color: blue;">object</span>> viewModelState)
{
<span style="color: blue;">this</span>.Title = <span style="color: #a31515;">"Hello prism"</span>;
}
}</pre>
<i><br /></i>
<i>With prism MVVM it conains basic funtions in store app such like OnNavigatedTo , OnNavigatedFrom etc. You can directly use them inside the ViewModel </i><br />
<br />
Run and Enjoy the Prism.<br />
<br />
It is really easy to build in complex applications in enterprise level. even if you not like Prism code in specific scenario you can switch with your old MVVM too inside the same project <br />
<br />
<br />
<br />
<br />
<br />
<a href="http://bit.ly/1DL68OI" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" width="200" /></a><br />
<br />
<br />
<br />
<br />
<span style="font-size: x-large;">Full Code </span><br />
<span style="font-size: x-large;"><a href="http://bit.ly/1DL68OI">http://bit.ly/1DL68OI</a> </span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-37905302885140074972015-02-03T06:05:00.000-08:002015-03-05T08:18:12.588-08:00Tips to build Real time Applications (SignalR) <div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: small;">What is real time ? </span>People who use the applications they need to see the actions one it happens . No delays or refreshing even it is desktop application, App , web or some other application. <br />
<br />
<span style="font-size: large;">How its possible ?</span><br />
<br />
There is few options that developer can looking at.<br />
1. Running background thread<br />
2. Use <b>SignalR</b><br />
<br />
1st option that I describe here is not the best option in most of the times. Running background thread all times is resource consuming and it always use pulling (grab the data from the remote). And there is security concerns as well. But believe me there is some applications which we need to use this and thread is worth than other .<br />
<br />
<br />
Most pf the time best option is <span style="font-size: large;"><b>SignalR</b></span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">What is SignalR ?</span><br />
<span style="font-size: small;"> SignalR is series of abstractions around various methods of providing persistent Http Connections. Simply it makes real time communication without effort </span><br />
<br />
<span style="font-size: large;"> Where ? </span><br />
SignalR can be in<br />
<ol style="text-align: left;">
<li>Web application</li>
<li>Desktop Applicaton </li>
<li>App (windows /iOs/Android/berry ) </li>
</ol>
<br />
It is cross platform tool (totally open source) which capable of running with any platform.<br />
<br />
<br />
SignalR is <b>Client Server</b><br />
<br />
To use SignalR you need to have Server (basically you can create serever with asp.net i'll add posts future)<br />
<br />
And client application, (if you use javascript no need to have client nuget to consume SignalR) you can make any application by just adding SignalR nugets to your project.<br />
<br />
<i>Microsoft Asp.Net SignalR </i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-30y0y1N5PDY/VNDT1wcq4lI/AAAAAAAAA5Y/XgOmVtTr-20/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-30y0y1N5PDY/VNDT1wcq4lI/AAAAAAAAA5Y/XgOmVtTr-20/s1600/Untitled.png" height="125" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Modern servers from Windows Server 2012 is support SignalR (Real time Communication perfectly )<br />
<br />
There is life beyond <a href="https://pusher.com/websockets">Web Sockets</a> <br />
<br />
<br />
Lets meet with handons later :) enjoy<br />
<br />
<a href="http://www.prabathsl.com/2015/03/first-signalr-codes.html">SignalR Coading </a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-82920083558513279162015-01-23T08:52:00.001-08:002015-01-23T08:52:30.377-08:00Microsoft Windows 10 Event. <div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/6cOk5AeFyqo?feature=player_detailpage" width="640"></iframe>
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-6645836628856595102015-01-18T00:24:00.001-08:002015-01-18T00:24:07.069-08:00Working in designtime with Data in MVVM <div dir="ltr" style="text-align: left;" trbidi="on">
If we develop applications ( XAML based) we have a problem with see the data in design view. Every application become successful when its interface is attractive. If our application is based on internet or any other computational task there is difficulty on make Interfaces without running the application real time. Here is solution for it <br /><br />Use design time data binding which already with the xaml based application <br /><br />Today we going to develop the windows 8.1 store application. ( This is same with any XAML based Application )<br />
<br />
1. Create Windows 8.1 store application form the Visual studio. (I named it as <i><b>DesignTimedata</b></i> )<br />
2. Create ViewModel to bind the run time data , In following here is My <b>MainViewModel.cs</b><br />
<br />
With this example we are not going to the use internet or other tasks .therefore just hard corded the values in constructor <b> </b><br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">namespace</span> DesignTimeData.Runtime
{
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MainViewModel</span>:<span style="color: #2b91af;">INotifyPropertyChanged</span>
{
<span style="color: blue;">private</span> <span style="color: blue;">string</span> _Title { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Title
{
<span style="color: blue;">get</span> { <span style="color: blue;">return</span> _Title; }
<span style="color: blue;">set</span>
{
_Title = <span style="color: blue;">value</span>;
OnPropertyChanged(<span style="color: #a31515;">"Title"</span>);
}
}
<span style="color: blue;">private</span> <span style="color: blue;">string</span> _Description { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Description
{
<span style="color: blue;">get</span> { <span style="color: blue;">return</span> _Description; }
<span style="color: blue;">set</span>
{
_Description = <span style="color: blue;">value</span>;
OnPropertyChanged(<span style="color: #a31515;">"Description"</span>);
}
}
<span style="color: blue;">public</span> MainViewModel()
{</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: green;"> // Hard coded runtime data</span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> <span style="color: blue;">this</span>._Title = <span style="color: #a31515;">"Title in Run time"</span>;
<span style="color: blue;">this</span>._Description = <span style="color: #a31515;">"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna."</span>;
}
<span style="color: green;">// Create the OnPropertyChanged method to raise the event </span>
<span style="color: green;">// Use in MVVM</span>
<span style="color: blue;">public</span> <span style="color: blue;">event</span> <span style="color: #2b91af;">PropertyChangedEventHandler</span> PropertyChanged;
<span style="color: blue;">protected</span> <span style="color: blue;">void</span> OnPropertyChanged(<span style="color: blue;">string</span> name)
{
<span style="color: #2b91af;">PropertyChangedEventHandler</span> handler = PropertyChanged;
<span style="color: blue;">if</span> (handler != <span style="color: blue;">null</span>)
{
handler(<span style="color: blue;">this</span>, <span style="color: blue;">new</span> <span style="color: #2b91af;">PropertyChangedEventArgs</span>(name));
}
}
}
}</pre>
<br />
<br />
2. Then bind the ViewModel to the View with relevant tags. <br />You can use Singleton or Page Resource binding . In here Im using Bind the ViewModel to the Page in XAML . It gives me <a href="http://msdn.microsoft.com/en-us/library/hcw1s69b.aspx">intellisense </a>in XAML .<br />
<br />
Here is my <i><b>MainPage.xaml</b></i><br /><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: #a31515;">Page</span>
<span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">=</span><span style="color: blue;">"DesignTimeData.MainPage"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">local</span><span style="color: blue;">=</span><span style="color: blue;">"using:DesignTimeData"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">d</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/expression/blend/2008"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">mc</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.openxmlformats.org/markup-compatibility/2006"</span>
<span style="color: red;"> <span style="background-color: yellow;">xmlns</span></span><span style="background-color: yellow;"><span style="color: blue;">:</span><span style="color: red;">runtime</span><span style="color: blue;">=</span><span style="color: blue;">"using:DesignTimeData.Runtime"</span></span>
<span style="color: red;"> mc</span><span style="color: blue;">:</span><span style="color: red;">Ignorable</span><span style="color: blue;">=</span><span style="color: blue;">"d"</span><span style="color: blue;">></span>
<span style="background-color: yellow;"> <span style="color: blue;"><</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">runtime</span><span style="color: blue;">:</span><span style="color: #a31515;">MainViewModel</span><span style="color: blue;">/></span>
<span style="color: blue;"></</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span></span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> </span></pre>
3 .Then Create New Class which have exact name of your view model. Better to use different namespace / folder . In this case It is<span style="color: #a31515;"> MainViewModel </span><br />
Here is my design time ViewModel. It will contains all test data which displayed in design view in visual studio<br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">namespace</span> DesignTimeData.DesignTimedata
{
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MainViewModel</span>
{
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Title { <span style="color: blue;">get</span> { <span style="color: blue;">return</span> <span style="color: #a31515;">"DesignTime Title"</span>; } }
<span style="color: blue;">public</span> <span style="color: blue;">string</span> Description { <span style="color: blue;">get</span> { <span style="color: blue;">return</span> <span style="color: #a31515;">"Design time description"</span>; } }
}
} </pre>
<br />
4. Then lets bind the design time data into the design (xaml) . In here there is always tag like this<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: red;"> mc</span><span style="color: blue;">:</span><span style="color: red;">Ignorable</span><span style="color: blue;">=</span><span style="color: blue;">"d"</span><span style="color: blue;"> </span></pre>
with every page. something defines under this tag will not be displayed in the runtime. then this is the one that we need to use. <br />
<br />
With this <b>d </b>we can define all the properties which page have and change them. but none of them are effecting the real application .<br />
<br />
Lets bind the ViewModel to the page and use it with design time . Here is my full page<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"><</span><span style="color: #a31515;">Page</span>
<span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">=</span><span style="color: blue;">"DesignTimeData.MainPage"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">local</span><span style="color: blue;">=</span><span style="color: blue;">"using:DesignTimeData"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">d</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.microsoft.com/expression/blend/2008"</span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">mc</span><span style="color: blue;">=</span><span style="color: blue;">"http://schemas.openxmlformats.org/markup-compatibility/2006"</span>
<span style="color: red;"> <span style="background-color: yellow;">xmlns</span></span><span style="background-color: yellow;"><span style="color: blue;">:</span><span style="color: red;">desgn</span><span style="color: blue;">=</span><span style="color: blue;">"using:DesignTimeData.DesignTimedata"</span></span>
<span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">runtime</span><span style="color: blue;">=</span><span style="color: blue;">"using:DesignTimeData.Runtime"</span>
<span style="color: red;"> mc</span><span style="color: blue;">:</span><span style="color: red;">Ignorable</span><span style="color: blue;">=</span><span style="color: blue;">"d"</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">runtime</span><span style="color: blue;">:</span><span style="color: #a31515;">MainViewModel</span><span style="color: blue;">/></span>
<span style="color: blue;"></</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span>
<span style="background-color: yellow;"> <span style="color: blue;"><</span><span style="color: #a31515;">d</span><span style="color: blue;">:</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">desgn</span><span style="color: blue;">:</span><span style="color: #a31515;">MainViewModel</span><span style="color: blue;"> /></span>
<span style="color: blue;"></</span><span style="color: #a31515;">d</span><span style="color: blue;">:</span><span style="color: #a31515;">Page.DataContext</span><span style="color: blue;">></span></span>
<span style="color: blue;"><</span><span style="color: #a31515;">Grid</span><span style="color: red;"> Background</span><span style="color: blue;">="{</span><span style="color: #a31515;">ThemeResource</span><span style="color: red;"> ApplicationPageBackgroundThemeBrush</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">StackPanel</span><span style="color: red;"> Margin</span><span style="color: blue;">=</span><span style="color: blue;">"100,150,0,0"</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">TextBlock</span><span style="color: red;"> Style</span><span style="color: blue;">="{</span><span style="color: #a31515;">StaticResource</span><span style="color: red;"> HeaderTextBlockStyle</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: red;"> Text</span><span style="color: blue;">="{</span><span style="color: #a31515;">Binding</span><span style="color: red;"> Title</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">/></span>
<span style="color: blue;"><</span><span style="color: #a31515;">TextBlock</span><span style="color: red;"> Style</span><span style="color: blue;">="{</span><span style="color: #a31515;">StaticResource</span><span style="color: red;"> SubtitleTextBlockStyle</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: red;"> Text</span><span style="color: blue;">="{</span><span style="color: #a31515;">Binding</span><span style="color: red;"> Description</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">/></span>
<span style="color: blue;"></</span><span style="color: #a31515;">StackPanel</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: #a31515;">Grid</span><span style="color: blue;">></span>
<span style="color: blue;"></</span><span style="color: #a31515;">Page</span><span style="color: blue;">></span></pre>
<br />
Now we can see the vaues that we put to test the Application UI and make any changes to it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Xzd_HRtSbkc/VLtsdVMs97I/AAAAAAAAA40/d45kGl4mZCI/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Xzd_HRtSbkc/VLtsdVMs97I/AAAAAAAAA40/d45kGl4mZCI/s1600/Untitled.png" height="220" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Here is runtime result of the app<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-tvurSpML6GI/VLtstuIswVI/AAAAAAAAA48/NKoePLNJypc/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-tvurSpML6GI/VLtstuIswVI/AAAAAAAAA48/NKoePLNJypc/s1600/Untitled.png" height="223" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: large;">Enjoy </span><br />
<br />
<br />
<a href="http://bit.ly/1xiJ3yZ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" width="200" /></a><br />
<br />
<br />
<br />
<br />
<span style="font-size: x-large;">Full Code </span><br />
<span style="font-size: x-large;"><a href="http://bit.ly/1xiJ3yZ">http://bit.ly/1xiJ3yZ</a> </span><br />
<br />
<div style="direction: ltr; margin-bottom: 0pt; margin-left: 0in; margin-top: 0pt; text-align: left; unicode-bidi: embed; word-break: normal;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><b><span style="font-family: inherit;"> </span></b> </span></span></div>
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-66211108596694452492015-01-13T07:36:00.001-08:002015-01-13T07:36:43.641-08:00Time Zone clonflictions with Cloud Services .. How to avoid .<div dir="ltr" style="text-align: left;" trbidi="on">
There is problems when you are developing applications which based on cloud services. That is , time of your service (servers ) are different than the time that your application. If you are using time stamp based data pulling from the cloud service you are in big trouble. <br />
<br />
Here if two basic solutions that you can use in those scenarios<br />
1. Use UTC (absolute) Time (highly recommended) <br />
2. Change time zone of the server according to the requirement<br />
<br />
Use absolute time you can just do with simple DateTime object.<br />in C# simply like this <br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: #2b91af;">DateTime</span>.UtcNow</pre>
<br />
<span style="font-size: large;">Change Time zone of the Server ( Instances of cloud service ) </span><br />
This is the Task that you cannot find lot of documentation<br />
If you follow following steps You can easily change server time zone ( In azure (cloud) it will randomly create and no one can predict that which instance of the server will run entire service life cycle *Its never happens with cloud) in every running instance once it starting<br />
<br />
<br />
1. Create batch <b>(*.bat)</b> file with flowing command <br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">tzutil /s "Sri Lanka Standard Time" </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<br />
<b>Here is time zone reference </b><br />
<br />
<table><tbody>
<tr><td class="blue"><strong>Index</strong></td><td class="blue"><strong>Name of Time Zone</strong></td><td class="blue"><strong>Time</strong></td></tr>
<tr><td>000</td><td>Dateline Standard Time</td><td>(GMT-12:00) International Date Line West</td></tr>
<tr><td>001</td><td>Samoa Standard Time</td><td>(GMT-11:00) Midway Island, Samoa</td></tr>
<tr><td>002</td><td>Hawaiian Standard Time</td><td>(GMT-10:00) Hawaii</td></tr>
<tr><td>003</td><td>Alaskan Standard Time</td><td>(GMT-09:00) Alaska</td></tr>
<tr><td>004</td><td>Pacific Standard Time</td><td>(GMT-08:00) Pacific Time (US and Canada); Tijuana</td></tr>
<tr><td>010</td><td>Mountain Standard Time</td><td>(GMT-07:00) Mountain Time (US and Canada)</td></tr>
<tr><td>013</td><td>Mexico Standard Time 2</td><td>(GMT-07:00) Chihuahua, La Paz, Mazatlan</td></tr>
<tr><td>015</td><td>U.S. Mountain Standard Time</td><td>(GMT-07:00) Arizona</td></tr>
<tr><td>020</td><td>Central Standard Time</td><td>(GMT-06:00) Central Time (US and Canada</td></tr>
<tr><td>025</td><td>Canada Central Standard Time</td><td>(GMT-06:00) Saskatchewan</td></tr>
<tr><td>030</td><td>Mexico Standard Time</td><td>(GMT-06:00) Guadalajara, Mexico City, Monterrey</td></tr>
<tr><td>033</td><td>Central America Standard Time</td><td>(GMT-06:00) Central America</td></tr>
<tr><td>035</td><td>Eastern Standard Time</td><td>(GMT-05:00) Eastern Time (US and Canada)</td></tr>
<tr><td>040</td><td>U.S. Eastern Standard Time</td><td>(GMT-05:00) Indiana (East)</td></tr>
<tr><td>045</td><td>S.A. Pacific Standard Time</td><td>(GMT-05:00) Bogota, Lima, Quito</td></tr>
<tr><td>050</td><td>Atlantic Standard Time</td><td>(GMT-04:00) Atlantic Time (Canada)</td></tr>
<tr><td>055</td><td>S.A. Western Standard Time</td><td>(GMT-04:00) Caracas, La Paz</td></tr>
<tr><td>056</td><td>Pacific S.A. Standard Time</td><td>(GMT-04:00) Santiago</td></tr>
<tr><td>060</td><td>Newfoundland and Labrador Standard Time</td><td>(GMT-03:30) Newfoundland and Labrador</td></tr>
<tr><td>065</td><td>E. South America Standard Time</td><td>(GMT-03:00) Brasilia</td></tr>
<tr><td>070</td><td>S.A. Eastern Standard Time</td><td>(GMT-03:00) Buenos Aires, Georgetown</td></tr>
<tr><td>073</td><td>Greenland Standard Time</td><td>(GMT-03:00) Greenland</td></tr>
<tr><td>075</td><td>Mid-Atlantic Standard Time</td><td>(GMT-02:00) Mid-Atlantic</td></tr>
<tr><td>080</td><td>Azores Standard Time</td><td>(GMT-01:00) Azores</td></tr>
<tr><td>083</td><td>Cape Verde Standard Time</td><td>(GMT-01:00) Cape Verde Islands</td></tr>
<tr><td>085</td><td>GMT Standard Time</td><td>(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London</td></tr>
<tr><td>090</td><td>Greenwich Standard Time</td><td>(GMT) Casablanca, Monrovia</td></tr>
<tr><td>095</td><td>Central Europe Standard Time</td><td>(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</td></tr>
<tr><td>100</td><td>Central European Standard Time</td><td>(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb</td></tr>
<tr><td>105</td><td>Romance Standard Time</td><td>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</td></tr>
<tr><td>110</td><td>W. Europe Standard Time</td><td>(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</td></tr>
<tr><td>113</td><td>W. Central Africa Standard Time</td><td>(GMT+01:00) West Central Africa</td></tr>
<tr><td>115</td><td>E. Europe Standard Time</td><td>(GMT+02:00) Bucharest</td></tr>
<tr><td>120</td><td>Egypt Standard Time</td><td>(GMT+02:00) Cairo</td></tr>
<tr><td>125</td><td>FLE Standard Time</td><td>(GMT+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius</td></tr>
<tr><td>130</td><td>GTB Standard Time</td><td>(GMT+02:00) Athens, Istanbul, Minsk</td></tr>
<tr><td>135</td><td>Israel Standard Time</td><td>(GMT+02:00) Jerusalem</td></tr>
<tr><td>140</td><td>South Africa Standard Time</td><td>(GMT+02:00) Harare, Pretoria</td></tr>
<tr><td>145</td><td>Russian Standard Time</td><td>(GMT+03:00) Moscow, St. Petersburg, Volgograd</td></tr>
<tr><td>150</td><td>Arab Standard Time</td><td>(GMT+03:00) Kuwait, Riyadh</td></tr>
<tr><td>155</td><td>E. Africa Standard Time</td><td>(GMT+03:00) Nairobi</td></tr>
<tr><td>158</td><td>Arabic Standard Time</td><td>(GMT+03:00) Baghdad</td></tr>
<tr><td>160</td><td>Iran Standard Time</td><td>(GMT+03:30) Tehran</td></tr>
<tr><td>165</td><td>Arabian Standard Time</td><td>(GMT+04:00) Abu Dhabi, Muscat</td></tr>
<tr><td>170</td><td>Caucasus Standard Time</td><td>(GMT+04:00) Baku, Tbilisi, Yerevan</td></tr>
<tr><td>175</td><td>Transitional Islamic State of Afghanistan Standard Time</td><td>(GMT+04:30) Kabul</td></tr>
<tr><td>180</td><td>Ekaterinburg Standard Time</td><td>(GMT+05:00) Ekaterinburg</td></tr>
<tr><td>185</td><td>West Asia Standard Time</td><td>(GMT+05:00) Islamabad, Karachi, Tashkent</td></tr>
<tr><td>190</td><td>India Standard Time</td><td>(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</td></tr>
<tr><td>193</td><td>Nepal Standard Time</td><td>(GMT+05:45) Kathmandu</td></tr>
<tr><td>195</td><td>Central Asia Standard Time</td><td>(GMT+06:00) Astana, Dhaka</td></tr>
<tr><td>200</td><td>Sri Lanka Standard Time</td><td>(GMT+06:00) Sri Jayawardenepura</td></tr>
<tr><td>201</td><td>N. Central Asia Standard Time</td><td>(GMT+06:00) Almaty, Novosibirsk</td></tr>
<tr><td>203</td><td>Myanmar Standard Time</td><td>(GMT+06:30) Yangon Rangoon</td></tr>
<tr><td>205</td><td>S.E. Asia Standard Time</td><td>(GMT+07:00) Bangkok, Hanoi, Jakarta</td></tr>
<tr><td>207</td><td>North Asia Standard Time</td><td>(GMT+07:00) Krasnoyarsk</td></tr>
<tr><td>210</td><td>China Standard Time</td><td>(GMT+08:00) Beijing, Chongqing, Hong Kong SAR, Urumqi</td></tr>
<tr><td>215</td><td>Singapore Standard Time</td><td>(GMT+08:00) Kuala Lumpur, Singapore</td></tr>
<tr><td>220</td><td>Taipei Standard Time</td><td>(GMT+08:00) Taipei</td></tr>
<tr><td>225</td><td>W. Australia Standard Time</td><td>(GMT+08:00) Perth</td></tr>
<tr><td>227</td><td>North Asia East Standard Time</td><td>(GMT+08:00) Irkutsk, Ulaanbaatar</td></tr>
<tr><td>230</td><td>Korea Standard Time</td><td>(GMT+09:00) Seoul</td></tr>
<tr><td>235</td><td>Tokyo Standard Time</td><td>(GMT+09:00) Osaka, Sapporo, Tokyo</td></tr>
<tr><td>240</td><td>Yakutsk Standard Time</td><td>(GMT+09:00) Yakutsk</td></tr>
<tr><td>245</td><td>A.U.S. Central Standard Time</td><td>(GMT+09:30) Darwin</td></tr>
<tr><td>250</td><td>Cen. Australia Standard Time</td><td>(GMT+09:30) Adelaide</td></tr>
<tr><td>255</td><td>A.U.S. Eastern Standard Time</td><td>(GMT+10:00) Canberra, Melbourne, Sydney</td></tr>
<tr><td>260</td><td>E. Australia Standard Time</td><td>(GMT+10:00) Brisbane</td></tr>
<tr><td>265</td><td>Tasmania Standard Time</td><td>(GMT+10:00) Hobart</td></tr>
<tr><td>270</td><td>Vladivostok Standard Time</td><td>(GMT+10:00) Vladivostok</td></tr>
<tr><td>275</td><td>West Pacific Standard Time</td><td>(GMT+10:00) Guam, Port Moresby</td></tr>
<tr><td>280</td><td>Central Pacific Standard Time</td><td>(GMT+11:00) Magadan, Solomon Islands, New Caledonia</td></tr>
<tr><td>285</td><td>Fiji Islands Standard Time</td><td>(GMT+12:00) Fiji Islands, Kamchatka, Marshall Islands</td></tr>
<tr><td>290</td><td>New Zealand Standard Time</td><td>(GMT+12:00) Auckland, Wellington</td></tr>
<tr><td>300</td><td>Tonga Standard Time</td><td>(GMT+13:00) Nuku'alofa</td></tr>
</tbody></table>
<br />
2. Add it in to the cloud service ( Not to the cloud service project ) <br />
<br />
*Add it to project which identifies as role (web, worker) by cloud project . In following example You need to add batch file into <b>WebRole1</b> project <br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-BrV-E7rbcNk/VLU5f2gkhCI/AAAAAAAAA4E/TrjtxRCnIm0/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="http://2.bp.blogspot.com/-BrV-E7rbcNk/VLU5f2gkhCI/AAAAAAAAA4E/TrjtxRCnIm0/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-BrV-E7rbcNk/VLU5f2gkhCI/AAAAAAAAA4E/TrjtxRCnIm0/s1600/Untitled.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3. Then R-Click on the batch file and select properties from visual studio . In properties under the <b>Advanced </b>change <i>Copy To Output Directory</i> property in to copy always.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-7BDWob-OKwU/VLU6GFPx4DI/AAAAAAAAA4M/g0C-Jnwe03U/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-7BDWob-OKwU/VLU6GFPx4DI/AAAAAAAAA4M/g0C-Jnwe03U/s1600/Untitled.png" height="170" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4. Then go to the Cloud project and open the <i><b>ServiceDefinition.csdf</b></i> file<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-o4CQeEPjM2I/VLU6uGgZh2I/AAAAAAAAA4U/UpO24X3drRw/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-o4CQeEPjM2I/VLU6uGgZh2I/AAAAAAAAA4U/UpO24X3drRw/s1600/Untitled.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
5. Under WebRole Tag add Start up task as follow . <br /><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">WebRole</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">*****</span>"<span style="color: blue;"> </span><span style="color: red;">vmsize</span><span style="color: blue;">=</span>"<span style="color: blue;">Small</span>"<span style="color: blue;">></span>
<span style="background-color: yellow;"><span style="color: blue;"> <b><i><</i></b></span><b><i><span style="color: #a31515;">Startup</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Task</span><span style="color: blue;"> </span><span style="color: red;">commandLine</span><span style="color: blue;">=</span>"<span style="color: blue;">NameOfBatchFile.bat</span>"<span style="color: blue;"> </span><span style="color: red;">executionContext</span><span style="color: blue;">=</span>"<span style="color: blue;">elevated</span>"<span style="color: blue;"> </span><span style="color: red;">taskType</span><span style="color: blue;">=</span>"<span style="color: blue;">simple</span>"<span style="color: blue;">/></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">Startup</span><span style="color: blue;">></span><span style="color: blue;"> </span></i></b></span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">Sites</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Site</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">Web</span>"<span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Bindings</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Binding</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">Endpoint1</span>"<span style="color: blue;"> </span><span style="color: red;">endpointName</span><span style="color: blue;">=</span>"<span style="color: blue;">Endpoint1</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">Bindings</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">Site</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">Sites</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Endpoints</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">InputEndpoint</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">Endpoint1</span>"<span style="color: blue;"> </span><span style="color: red;">protocol</span><span style="color: blue;">=</span>"<span style="color: blue;">http</span>"<span style="color: blue;"> </span><span style="color: red;">port</span><span style="color: blue;">=</span>"<span style="color: blue;">80</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">Endpoints</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">WebRole</span><span style="color: blue;">></span></pre>
<br />
<br />
Now it is done ... You free to go with your cloud service <br /><br /><br />Enjoy <br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-65503566418403191082014-11-15T08:42:00.000-08:002014-11-15T08:42:30.785-08:00Microsoft Visual Studio 2015 for every developer in every platform <div dir="ltr" style="text-align: left;" trbidi="on">
Microsoft release the ultimate developer tool next version for preview. Now you can download it from <a href="http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx">Microsoft Visual Studio downloads </a>. It is designed for support n every developer platform.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://t3.gstatic.com/images?q=tbn:ANd9GcS7sthXxH2wLCBUS5lktgNeK2XeBC5MaLx2mxxRoZgBWR3XFPSKCQ" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://t3.gstatic.com/images?q=tbn:ANd9GcS7sthXxH2wLCBUS5lktgNeK2XeBC5MaLx2mxxRoZgBWR3XFPSKCQ" height="249" width="400" /></a></div>
And Microsoft enables the access to developer platform for developers as open source project It is one of favorite thing to my self. hopefully it will rapidly improve the new feature additions to the visual studio. <br /><br />in <span class="value">12 Nov 2014 Microsoft announced their <a href="https://github.com/Microsoft/dotnet">.NET</a> 2015 version as well with Visual Studio 2015. All the core stacks of those platforms are now open source.</span> Here is some summery form the MSDN release notes <br />
<ul>
<li>Over the coming months, we will be <strong>open sourcing the full server-side .NET Core stack</strong>, from ASP.NET 5 down to the Core Runtime and Framework, and the <strong>open source</strong> .<strong>NET will be expanded to run on Linux and Mac OS X</strong> in addition to Windows.<br /> </li>
<li>A preview of the next generation of our tools is available today with <strong>Visual Studio 2015 Preview</strong> and <strong>.NET 2015 Preview</strong>.
Together, these bring industry-leading cross-platform mobile
development tools, deep support for cloud development, and great
productivity improvements across the breadth of the developer
experience.<br /> </li>
<li>Visual Studio Online is expanding its DevOps portfolio with the new <strong>Visual Studio Online Release Management service and Visual Studio Cloud Deployment Projects</strong>. </li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-INLw8n3y5IM/VBRFKRgC8qI/AAAAAAAAA18/C-Z07d91PeQ/s1600/index.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-INLw8n3y5IM/VBRFKRgC8qI/AAAAAAAAA18/C-Z07d91PeQ/s1600/index.jpg" height="229" width="400" /></a></div>
With Visual studio 2015 developers can increase their focus on targeting the mobile
device platform spanning iOS, Android and Windows, the need for
cross-platform mobile development solutions has never been greater.<br />
<br />
On top of great tools for building Universal Windows Applications,
Visual Studio 2015 offers the most complete cross-platform mobile
application development environment, with great solutions for C#, C++
and HTML/JavaScript development targeting iOS, Android, Windows and
more. <br />
<br />
Additionally It enables new rich emulators for android development that mostly smiler as windows Store app Emulators. It is very rich with Geo sensing , gestures etc. Now you don't need to vote on usual android bullshit emulator any more. <br />
<br />
And Visual studio supports Apache<strong><em> </em></strong><em></em>Cordova and it enables to developers authoring, debugging, analyzing, packaging, and deploying HTML/ Javascript applications with <strong><em></em></strong><em></em>Cordova in visual studio<br />
<br />
<br />
Download , Enjoy and remember <b>Contribute </b>To Visual Studio <br />
<br />
<br />
<br />
<br />
<br />
<br />
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-15492031108179978082014-11-12T07:28:00.000-08:002015-04-27T08:50:39.569-07:00NodeJs web service With MongoDb <div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://calebmadrigal.com/static/images/nodejs-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://calebmadrigal.com/static/images/nodejs-logo.png" height="160" width="320" /></a><a href="http://nodejs.org/">NodeJs </a>is one of the powerful Lagrange that can do lot of things in programming world. When size of data become larger most of databases not can handle them efficiently. Therefor it leads to the change of database structure. Relational (SQL) database is not the best solution in most cases. NoSQL (Not Only SQL) databases are the best solution in those situations. One of the best NoSQL databse is <a href="http://www.mongodb.org/">MongoDb</a>.<br />
<br />
You can follow above hyperlinks to download and configure Nodejs and MongoDb within your local machine. if you having trouble just comment below..ill update another post about configurations.<br />
<br />
With this post I am going to demonstrate how to create REST service with NodeJs and MongoDB<br />
<br />
You can use <a href="http://www.sublimetext.com/">SublimeText</a> as text editor for node js<br />
<br />
1 . First create Document in MongoDb Name it and UserDetails<br />
<br />
2. Add following Data to that document<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: green;">/* 0 */</span>
{
<span style="color: #2e75b6;">"_id"</span> : ObjectId("54608e50feeb4595a4f09651"),
<span style="color: #2e75b6;">"userName"</span> : <span style="color: #a31515;">"Harith"</span>,
<span style="color: #2e75b6;">"Age"</span> : 25,
<span style="color: #2e75b6;">"Expired"</span> : <span style="color: blue;">true</span>
}
<span style="color: green;">/* 1 */</span>
{
<span style="color: #2e75b6;">"_id"</span> : ObjectId("54608ea4feeb4595a4f09652"),
<span style="color: #2e75b6;">"userName"</span> : <span style="color: #a31515;">"Jaliya"</span>,
<span style="color: #2e75b6;">"password"</span> : <span style="color: #a31515;">"123456"</span>,
<span style="color: #2e75b6;">"Age"</span> : 30
}
<span style="color: green;">/* 2 */</span>
{
<span style="color: #2e75b6;">"_id"</span> : ObjectId("5461d46dfeeb4595a4f09655"),
<span style="color: #2e75b6;">"name"</span> : <span style="color: #a31515;">"Joe Bookreader"</span>,
<span style="color: #2e75b6;">"address"</span> : {
<span style="color: #2e75b6;">"street"</span> : <span style="color: #a31515;">"123 Fake Street"</span>,
<span style="color: #2e75b6;">"city"</span> : <span style="color: #a31515;">"Faketon"</span>,
<span style="color: #2e75b6;">"state"</span> : <span style="color: #a31515;">"MA"</span>,
<span style="color: #2e75b6;">"zip"</span> : <span style="color: #a31515;">"12345"</span>
}
}
<span style="color: green;">/* 3 */</span>
{
<span style="color: #2e75b6;">"_id"</span> : ObjectId("54608f20feeb4595a4f09653"),
<span style="color: #2e75b6;">"UserId"</span> : <span style="color: #a31515;">"1"</span>,
<span style="color: #2e75b6;">"address"</span> : {
<span style="color: #2e75b6;">"street"</span> : <span style="color: #a31515;">"123 Fake Street"</span>,
<span style="color: #2e75b6;">"city"</span> : <span style="color: #a31515;">"Faketon"</span>,
<span style="color: #2e75b6;">"state"</span> : <span style="color: #a31515;">"MA"</span>,
<span style="color: #2e75b6;">"zip"</span> : <span style="color: #a31515;">"12345"</span>
}
}</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<br />
Lets start to create NodeJs REST<br />
<br />
First create Javascript file named it as Rest.js<br />
<br />
To use MongoDb you need to install flowing <a href="https://www.npmjs.org/">npm </a>package by this command<br />
<span style="background-color: white; color: #666666; font-family: monospace, serif; font-size: 1em; line-height: 21px;">npm install mongojs</span><br />
<br />
Then add <i><b>package.json</b></i> file to the root of the folder and copy this to it<br />
<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;">{
<span style="color: #2e75b6;">"name"</span>: <span style="color: #a31515;">"Rest-server"</span>,
<span style="color: #2e75b6;">"version"</span>: <span style="color: #a31515;">"0.0.1"</span>,
<span style="color: #2e75b6;">"private"</span>: <span style="color: blue;">true</span>,
<span style="color: #2e75b6;">"dependencies"</span>: {
<span style="color: #2e75b6;">"express"</span>: <span style="color: #a31515;">"3.3.4"</span>
}
}</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;">Go to CMD and type npm install</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
Then start to coding real service in Rest,js<br />
<br />
1. Import following libraries to the js file<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: blue;">var</span> express = require(<span style="color: #a31515;">'express'</span>);
<span style="color: blue;">var</span> mongojs = require(<span style="color: #a31515;">'mongojs'</span>);</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
2. Then create Array to store all data that comes from Mongo Database<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: blue;">var</span> data = [];
</pre>
<br />
3. Lets code REST Like this<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: green;">// custom package</span>
<span style="color: blue;">var</span> app = express();
<span style="color: green;">// Array definition to store data</span>
<span style="color: blue;">var</span> data = [];
<span style="color: green;">// Http Normal get</span>
app.get(<span style="color: #a31515;">'/'</span>, <span style="color: blue;">function</span> (req, res) {
<span style="color: blue;">var</span> db = require(<span style="color: #a31515;">'mongojs'</span>).connect(<span style="color: #a31515;">'mongodb://localhost:27017/DocumentOrDb'</span>);
console.log(<span style="color: #a31515;">"Server is in listen1"</span>);
db.collection(<span style="color: #a31515;">"</span><span style="color: #a31515;">UserDetails</span><span style="color: #a31515;">"</span>).find(<span style="color: blue;">function</span> (err, docs) {</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"> data = [];
docs.forEach(<span style="color: blue;">function</span> (item) {
data.push(item);
})
});
console.log(<span style="color: #a31515;">"Server end"</span>);
res.send(data);
});</pre>
<br />
then run the service with <i>cmd </i><b>node Rest.js</b><br />
<br />
<br />
Here is the full code<br />
<br />
<br />
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="color: green;">/*
Rest Api with MongoDb Database
Author : prabathsl
Copyright © prabathsl 2014
*/</span>
<span style="color: green;">// Libraries</span>
<span style="color: blue;">var</span> express = require(<span style="color: #a31515;">'express'</span>);
<span style="color: blue;">var</span> mongojs = require(<span style="color: #a31515;">'mongojs'</span>);
<span style="color: green;">// custom package</span>
<span style="color: blue;">var</span> app = express();
<span style="color: green;">// Array definition to store data</span>
<span style="color: blue;">var</span> data = [];
<span style="color: green;">// Http Normal get</span>
app.get(<span style="color: #a31515;">'/'</span>, <span style="color: blue;">function</span> (req, res) {
<span style="color: blue;">var</span> db = require(<span style="color: #a31515;">'mongojs'</span>).connect(<span style="color: #a31515;">'mongodb://localhost:27017/DocumentOrDb'</span>);
console.log(<span style="color: #a31515;">"Server is in listen1"</span>);
db.collection(<span style="color: #a31515;">"SampleBigdata"</span>).find(<span style="color: blue;">function</span> (err, docs) {
data = [];
docs.forEach(<span style="color: blue;">function</span> (item) {
data.push(item);
})
});
console.log(<span style="color: #a31515;">"Server end"</span>);
res.send(data);
});
</pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"> Enjoy :) </span></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="font-family: 'Times New Roman'; font-size: small; white-space: normal;">
</span></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="font-family: 'Times New Roman'; font-size: small; white-space: normal;">
</span></pre>
<pre style="background: white; font-family: Consolas; font-size: 13px;"><span style="font-family: 'Times New Roman'; font-size: small; white-space: normal;">
</span></pre>
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-31759207126797315292014-11-06T06:27:00.001-08:002014-11-06T06:57:59.167-08:00Authentication with third party Auth providers in new era of Mobile Apps<div dir="ltr" style="text-align: left;" trbidi="on">
When you are developing app, to increase security and manipulate
users without taking user details is use authentication providers help
such like Live, Google, Facebook, twitter , linked in, flickers etc.<br />
<br />
With
the newer versions of mobile BCL is not supported the olde way of
authenticating with third party SDK's. All the BCL are updated with 8.1
and Universal apps. <br />
<br />
With this post I'm gonna explain how to implement those authentication (ex: facebook)<br />
<br />
1. you need to have facebook app. (<a href="http://%5c%5cdeveloper.facebook.com%29/">http:\\developer.facebook.com)</a> <br />
<br />
To
implement the Authentication you need to create separate class and
interface that can handle Continuation events. Once authentication done
it will redirect to the app using these Continuation objects. <br />
<br />
Here is ContinuationManager Class that I used<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">using</span> System.Text;
<span style="color: blue;">using</span> Windows.ApplicationModel.Activation;
<span style="color: blue;">using</span> Windows.UI.Xaml;
<span style="color: blue;">using</span> Windows.UI.Xaml.Controls;
<span style="color: blue;">#if</span> WINDOWS_PHONE_APP
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> ContinuationManager is used to detect if the most recent activation was due</span>
<span style="color: grey;">///</span><span style="color: green;"> to a continuation such as the FileOpenPicker or WebAuthenticationBroker</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">ContinuationManager</span>
{
<span style="color: #2b91af;">IContinuationActivatedEventArgs</span> args = <span style="color: blue;">null</span>;
<span style="color: blue;">bool</span> handled = <span style="color: blue;">false</span>;
<span style="color: #2b91af;">Guid</span> id = <span style="color: #2b91af;">Guid</span>.Empty;
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Sets the ContinuationArgs for this instance. Using default Frame of current Window</span>
<span style="color: grey;">///</span><span style="color: green;"> Should be called by the main activation handling code in App.xaml.cs</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"args"</span><span style="color: grey;">></span><span style="color: green;">The activation args</span><span style="color: grey;"></param></span>
<span style="color: blue;">internal</span> <span style="color: blue;">void</span> Continue(<span style="color: #2b91af;">IContinuationActivatedEventArgs</span> args)
{
Continue(args, <span style="color: #2b91af;">Window</span>.Current.Content <span style="color: blue;">as</span> <span style="color: #2b91af;">Frame</span>);
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Sets the ContinuationArgs for this instance. Should be called by the main activation</span>
<span style="color: grey;">///</span><span style="color: green;"> handling code in App.xaml.cs</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"args"</span><span style="color: grey;">></span><span style="color: green;">The activation args</span><span style="color: grey;"></param></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"rootFrame"</span><span style="color: grey;">></span><span style="color: green;">The frame control that contains the current page</span><span style="color: grey;"></param></span>
<span style="color: blue;">internal</span> <span style="color: blue;">void</span> Continue(<span style="color: #2b91af;">IContinuationActivatedEventArgs</span> args, <span style="color: #2b91af;">Frame</span> rootFrame)
{
<span style="color: blue;">if</span> (args == <span style="color: blue;">null</span>)
<span style="color: blue;">throw</span> <span style="color: blue;">new</span> <span style="color: #2b91af;">ArgumentNullException</span>(<span style="color: #a31515;">"args"</span>);
<span style="color: blue;">if</span> (<span style="color: blue;">this</span>.args != <span style="color: blue;">null</span> && !handled)
<span style="color: blue;">throw</span> <span style="color: blue;">new</span> <span style="color: #2b91af;">InvalidOperationException</span>(<span style="color: #a31515;">"Can't set args more than once"</span>);
<span style="color: blue;">this</span>.args = args;
<span style="color: blue;">this</span>.handled = <span style="color: blue;">false</span>;
<span style="color: blue;">this</span>.id = <span style="color: #2b91af;">Guid</span>.NewGuid();
<span style="color: blue;">if</span> (rootFrame == <span style="color: blue;">null</span>)
<span style="color: blue;">return</span>;
<span style="color: blue;">switch</span> (args.Kind)
{
<span style="color: blue;">case</span> <span style="color: #2b91af;">ActivationKind</span>.WebAuthenticationBrokerContinuation:
<span style="color: blue;">var</span> wabPage = rootFrame.Content <span style="color: blue;">as</span> <span style="color: #2b91af;">IWebAuthenticationContinuable</span>;
<span style="color: blue;">if</span> (wabPage != <span style="color: blue;">null</span>)
{
wabPage.ContinueWebAuthentication(args <span style="color: blue;">as</span> <span style="color: #2b91af;">WebAuthenticationBrokerContinuationEventArgs</span>);
}
<span style="color: blue;">break</span>;
}
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Marks the contination data as 'stale', meaning that it is probably no longer of</span>
<span style="color: grey;">///</span><span style="color: green;"> any use. Called when the app is suspended (to ensure future activations don't appear</span>
<span style="color: grey;">///</span><span style="color: green;"> to be for the same continuation) and whenever the continuation data is retrieved </span>
<span style="color: grey;">///</span><span style="color: green;"> (so that it isn't retrieved on subsequent navigations)</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">internal</span> <span style="color: blue;">void</span> MarkAsStale()
{
<span style="color: blue;">this</span>.handled = <span style="color: blue;">true</span>;
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Retrieves the continuation args, if they have not already been retrieved, and </span>
<span style="color: grey;">///</span><span style="color: green;"> prevents further retrieval via this property (to avoid accidentla double-usage)</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">IContinuationActivatedEventArgs</span> ContinuationArgs
{
<span style="color: blue;">get</span>
{
<span style="color: blue;">if</span> (handled)
<span style="color: blue;">return</span> <span style="color: blue;">null</span>;
MarkAsStale();
<span style="color: blue;">return</span> args;
}
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Unique identifier for this particular continuation. Most useful for components that </span>
<span style="color: grey;">///</span><span style="color: green;"> retrieve the continuation data via </span><span style="color: grey;"><see cref=</span><span style="color: grey;">"GetContinuationArgs"</span><span style="color: grey;">/></span><span style="color: green;"> and need</span>
<span style="color: grey;">///</span><span style="color: green;"> to perform their own replay check</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">Guid</span> Id { <span style="color: blue;">get</span> { <span style="color: blue;">return</span> id; } }
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Retrieves the continuation args, optionally retrieving them even if they have already</span>
<span style="color: grey;">///</span><span style="color: green;"> been retrieved</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"includeStaleArgs"</span><span style="color: grey;">></span><span style="color: green;">Set to true to return args even if they have previously been returned</span><span style="color: grey;"></param></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><returns></span><span style="color: green;">The continuation args, or null if there aren't any</span><span style="color: grey;"></returns></span>
<span style="color: blue;">public</span> <span style="color: #2b91af;">IContinuationActivatedEventArgs</span> GetContinuationArgs(<span style="color: blue;">bool</span> includeStaleArgs)
{
<span style="color: blue;">if</span> (!includeStaleArgs && handled)
<span style="color: blue;">return</span> <span style="color: blue;">null</span>;
MarkAsStale();
<span style="color: blue;">return</span> args;
}
}
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Implement this interface if your page invokes the web authentication</span>
<span style="color: grey;">///</span><span style="color: green;"> broker</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: blue;">interface</span> <span style="color: #2b91af;">IWebAuthenticationContinuable</span>
{
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> This method is invoked when the web authentication broker returns</span>
<span style="color: grey;">///</span><span style="color: green;"> with the authentication result</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><param name=</span><span style="color: grey;">"args"</span><span style="color: grey;">></span><span style="color: green;">Activated event args object that contains returned authentication token</span><span style="color: grey;"></param></span>
<span style="color: blue;">void</span> ContinueWebAuthentication(<span style="color: #2b91af;">WebAuthenticationBrokerContinuationEventArgs</span> args);
<span style="font-size: small;"> }</span></pre>
<br />
To handle the continuation after authentication you
nee to modify your app.xaml.cs as well. Because Once you redirect to
auth providers screen you are exit (deactivate) your app. then once auth
provider redirect back your app gets activate . <br />
<br />
Create object of ContinuationManager in App.xml.cs<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">static</span> ContinuationManager continuationManager { <span style="color: blue;">get</span>; <span style="color: blue;">private</span> <span style="color: blue;">set</span>; }
<span style="color: blue;"></span></pre>
Then OnActivated event of the app add the continuation handle<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">protected</span> <span style="color: blue;">async</span> <span style="color: blue;">override</span> <span style="color: blue;">void</span> OnActivated(<span style="color: #2b91af;">IActivatedEventArgs</span> e)
{
continuationManager = <span style="color: blue;">new</span> ContinuationManager();</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: green;"> //Check if this is a continuation</span> </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> <span style="color: blue;">var</span> continuationEventArgs = e <span style="color: blue;">as</span> IContinuationActivatedEventArgs;
<span style="color: blue;">if</span> (continuationEventArgs != <span style="color: blue;">null</span>)
{
continuationManager.Continue(continuationEventArgs);
}
<span style="color: #2b91af;"> Window</span>.Current.Activate(); </pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;">}</pre>
<br />
<br />
<br />
Then you are free to go with any kind of authentication that provide from auth provider <br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> <span style="color: blue;">internal</span> <span style="color: blue;">async</span> <span style="color: #2b91af;">Task</span> FacebookLoginMethod()
{
<span style="color: #2b91af;">String</span> FacebookURL = <span style="color: #a31515;">"https://www.facebook.com/dialog/oauth?client_id="</span> + <span style="color: #2b91af;">Uri</span>.EscapeDataString(<span style="color: #a31515;">"Your app Id"</span>) + <span style="color: #a31515;">"&redirect_uri="</span> + <span style="color: #2b91af;">Uri</span>.EscapeDataString(<span style="color: #a31515;">"https://m.facebook.com/dialog/return/ms"</span>) + <span style="color: #a31515;">"&scope=read_stream&display=popup&response_type=token"</span>;
System.<span style="color: #2b91af;">Uri</span> StartUri = <span style="color: blue;">new</span> <span style="color: #2b91af;">Uri</span>(FacebookURL);</pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: green;">//To use windows phone or windows app with Fb authentication user this end uri and redirect uri. Both are working </span></pre>
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"> System.<span style="color: #2b91af;">Uri</span> EndUri = <span style="color: blue;">new</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"https://m.facebook.com/dialog/return/ms"</span>);
<span style="color: blue;">#if</span> WINDOWS_PHONE_APP
<span style="color: grey;"> try</span>
<span style="color: grey;"> {</span>
<span style="color: grey;"> WebAuthenticationBroker.AuthenticateAndContinue(StartUri, EndUri, null, WebAuthenticationOptions.None);</span>
<span style="color: grey;"> }</span>
<span style="color: grey;"> catch</span>
<span style="color: grey;"> {</span>
<span style="color: grey;"> }</span>
<span style="color: blue;">#endif</span>
}</pre>
<br />
<br />
and use this ContinueWeb
authentication method inside the page that you call authentication.
otherwise it will not working. Inherit the IWebAuthnticationContinuable
interface to the page and add this method<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;">public</span> <span style="color: blue;">async</span> <span style="color: blue;">void</span> ContinueWebAuthentication(WebAuthenticationBrokerContinuationEventArgs args)
{
<span style="color: #2b91af;">WebAuthenticationResult</span> result = args.WebAuthenticationResult;
<span style="color: blue;">if</span> (result.ResponseStatus == <span style="color: #2b91af;">WebAuthenticationStatus</span>.Success)
{
token = <span style="color: blue;">await</span> FilterToken(result.ResponseData.ToString());
}
<span style="color: blue;">else</span>
{
<span style="color: #2b91af;">MessageDialog</span> Msg = <span style="color: blue;">new</span> <span style="color: #2b91af;">MessageDialog</span>(<span style="color: #a31515;">"Login failed"</span>);
Msg.ShowAsync();
}
}</pre>
<br />
<br />
This WebAuthentication result wil
contains the Authprovider's access token. Filterout it and do what ever
graph is available with authentication provider. <br />
<br />
<br />
Enjoy .. <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-16693624983629802192014-11-06T06:19:00.002-08:002014-11-06T06:21:21.689-08:00HttpClient Caching <div dir="ltr" style="text-align: left;" trbidi="on">
Is any one of you have an experience on when send http request through http client the response become the same (no change) even your source of the response (server) is updated.<br />
<br />
It is the way that default http protocol behaves<br />
<br />
By default HttpClient use a cache to store responses that come up with response headers without <code>Cache-Control </code>header. ( Ref: <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">HTTP Header fields</a>) <br />
<br />
In a scenario you need to change the cache behavior with HttpClient you can have two options<br />
<br />
1. Edit the service (server) to response with relevant cache headers<br />
2. Modify your request headers<br />
<br />
<span style="font-size: large;">Edit the service (server) to response with relevant cache headers </span><br />
<br />
In this model it give two benefits to you <br />
<ul>
<li>A content you will not use again is not stored in the client machine.</li>
<li>Other requests can benefit from the cache (when using the same instance of <code>HttpClient</code>).</li>
</ul>
In your web service go to <span style="font-family: "Courier New",Courier,monospace;">web.config</span> file and in-side the <span style="font-family: "Courier New",Courier,monospace;">system.serviceModel</span> add following tag with relevant headers you need<br />
<br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">client</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">endpoint</span><span style="color: blue;"> </span><span style="color: red;">address</span><span style="color: blue;">=</span>"<span style="color: blue;">http://localhost/...</span>"<span style="color: blue;"> ></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">headers</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">Cache-Control</span><span style="color: blue;">></span>no-cache<span style="color: blue;"></</span><span style="color: #a31515;">Cache-Control</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">headers</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">endpoint</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">client</span><span style="color: blue;">></span></pre>
<br />
<br />
<span style="font-size: large;">Modify your request headers</span><br />
<br />
if you don't have the access to the server you can go with this option. Just ad additional header with HttpClient and send the request then response automatically include these headers <br />
<br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: #2b91af;">HttpClient</span> Client = <span style="color: blue;">new</span> <span style="color: #2b91af;">HttpClient</span>();
Client.DefaultRequestHeaders.Add(<span style="color: #a31515;">"Cache-Control"</span>, <span style="color: #a31515;">"no-cache"</span>);</pre>
<br />
<br />
Now your HttpClient is ready to handle http request with no cache .<br />
<br />
<br />
here is Cache contol values that provide from W3 with Http headers.<br />
<br />
<pre> cache-directive = cache-request-directive
| cache-response-directive
</pre>
<pre> cache-request-directive =
"no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| cache-extension
</pre>
<pre> cache-response-directive =
"public"
| "private" [ "=" <"> 1#field-name <"> ]
| "no-cache" [ "=" <"> 1#field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| cache-extension </pre>
<pre> </pre>
<pre> </pre>
<pre><span style="font-family: Times,"Times New Roman",serif;"> </span></pre>
<pre><span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span style="font-family: Times,"Times New Roman",serif;"> Enjoy the code ..</span></span></span> </pre>
<pre> </pre>
<pre> </pre>
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-3848187746537774302014-10-15T23:35:00.002-07:002014-10-15T23:36:02.620-07:00Bug in Async BCL With Portable class libraries <div dir="ltr" style="text-align: left;" trbidi="on">
Any of you try to use async framework inside the Portable Class Library (PCL)? Is it working ? <br />
First instance it is not. There is a known bug in Async Framework with Poratable Class Libraries.<br />It will not detect the async and await correctly with task based operations<br />
<br />
<span style="font-size: large;">How to Fix</span><br />
First install the BCL Nuget package to he your PCL (<b>Microsoft.Bcl.Async</b>) <br />
in Console -<br />
<br />
<br />
<br />
<br />
<code>PM> Install-Package Microsoft.Bcl.Async
</code><br />
<br />Then replace following tags with relevant replacement tag <br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: blue;"> <</span><span style="color: #a31515;">dependentAssembly</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">assemblyIdentity</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Runtime</span>"<span style="color: blue;"> </span><span style="color: red;">publicKeyToken</span><span style="color: blue;">=</span>"<span style="color: blue;">b03f5f7f11d50a3a</span>"<span style="color: blue;"> </span><span style="color: red;">culture</span><span style="color: blue;">=</span>"<span style="color: blue;">neutral</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">bindingRedirect</span><span style="color: blue;"> </span><span style="color: red;">oldVersion</span><span style="color: blue;">=</span>"<span style="color: blue;">0.0.0.0-2.5.19.0</span>"<span style="color: blue;"> </span><span style="color: red;">newVersion</span><span style="color: blue;">=</span>"<span style="color: blue;">2.5.19.0</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">dependentAssembly</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">dependentAssembly</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">assemblyIdentity</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">System.Threading.Tasks</span>"<span style="color: blue;"> </span><span style="color: red;">publicKeyToken</span><span style="color: blue;">=</span>"<span style="color: blue;">b03f5f7f11d50a3a</span>"<span style="color: blue;"> </span><span style="color: red;">culture</span><span style="color: blue;">=</span>"<span style="color: blue;">neutral</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">bindingRedirect</span><span style="color: blue;"> </span><span style="color: red;">oldVersion</span><span style="color: blue;">=</span>"<span style="color: blue;">0.0.0.0-2.5.19.0</span>"<span style="color: blue;"> </span><span style="color: red;">newVersion</span><span style="color: blue;">=</span>"<span style="color: blue;">2.5.19.0</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">dependentAssembly</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">assemblyBinding</span><span style="color: blue;">></span></pre>
</div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-7561714321205276592014-10-11T09:10:00.000-07:002014-10-11T09:10:06.513-07:00Windows Azure Mobile Authentication Service<div dir="ltr" style="text-align: left;" trbidi="on">
Magic with Azure mobile services is easy handling in Authentication for users. It allows you to authenticate users <br />
1. Microsoft Account<br />
2. Facebook Account<br />
3. Twitter Account<br />
4. Google Account<br />
5. Azure Active Directory<br />
<br />
What else developer need..<br />
<br />
To enable all of those authentications you need to have apps running on those platforms. Url's for creating apps on each service provider is given below (Creating app on your hand <i>*Get the developer manual help according to each technology</i>)<br />
<br />
1. Microsoft - <a href="https://account.live.com/developers/applications">https://account.live.com/developers/applications<span id="goog_593791929"></span><span id="goog_593791930"></span></a><br />
2. Facebook - <a href="https://developers.facebook.com/">https://developers.facebook.com/</a> (Click on App's menu)<br />
3. Twitter - <a href="https://apps.twitter.com/app/new">https://apps.twitter.com/app/new</a><br />
4. Google - <a href="https://console.developers.google.com/project">https://console.developers.google.com/project</a><br />
<br />
** <span style="color: red;"><b>In every instance that you create apps use your <i>Azure Mobile Service Url </i></b></span><br />
<span style="color: red;"><b><i>HERE is URL for Microsoft Login</i></b></span><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: green;">for json backend :https://</span><span style="color: grey;"><mobile_service></span><span style="color: green;">.azure-mobile.net/login/microsoftaccount</span>
<span style="color: green;">for .NET backend :https://todolist.azure-mobile.net/signin-microsoft</span>
</pre>
<br />
<br />
With later posts you can see how to use Azure Active directory<br />
<br />
<span style="font-size: large;">Start from the beginning </span><br />
<br />
1. First login to your Azure portal and go to <b>Mobile Services </b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;">
<img border="0" src="http://2.bp.blogspot.com/-mcyW0CieKWw/U8Yv1Ed86DI/AAAAAAAAAuA/bpJqlbS15w4/s1600/11.png" height="225" width="400" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<a href="http://3.bp.blogspot.com/--jSSwXghXV0/U8YvcrL7cRI/AAAAAAAAAtw/Bfo4UNOlfBU/s1600/11.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><br />
<br />
2. Then select your Mobile Service , in here I have already created Mobile Service for the <a href="http://prabathsl.blogspot.com/2014/07/azure-mobile-services-start-to-build.html">Azure Mobile Services </a>post named as <i><b>prabathblog</b></i>. Select it and go inside. Then select <i><b>IDENTITY </b></i>Tab from menu.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-zkrmvxtp3cM/U8Yw5_1ivhI/AAAAAAAAAuM/noKp9g6Vyz4/s1600/11.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-zkrmvxtp3cM/U8Yw5_1ivhI/AAAAAAAAAuM/noKp9g6Vyz4/s1600/11.png" height="225" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3. Fill the values according to the Login provider with details<br />
<br />
<br />4. Then go to the dashboard and download the app. <br /><br />5. Use this code to authenticate in client side <br /><br />
<pre style="background: white; color: black; font-family: Consolas; font-size: 13;"><span style="color: grey;"> ///</span><span style="color: green;"> </span><span style="color: grey;"><summary></span>
<span style="color: grey;">///</span><span style="color: green;"> Simple authenticate</span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"></summary></span>
<span style="color: grey;">///</span><span style="color: green;"> </span><span style="color: grey;"><returns></returns></span>
<span style="color: blue;">private</span> <span style="color: blue;">async</span> <span style="color: #2b91af;">Task</span> AuthenticateAsyncSimple()
{
<span style="color: blue;">while</span> (user == <span style="color: blue;">null</span>)
{
<span style="color: blue;">string</span> message;
<span style="color: blue;">try</span>
{
user = <span style="color: blue;">await</span> <span style="color: #2b91af;">App</span>.MobileService
.LoginAsync(<span style="color: #2b91af;">MobileServiceAuthenticationProvider</span>.MicrosoftAccount);
message =
<span style="color: blue;">string</span>.Format(<span style="color: #a31515;">"You are now logged in - {0}"</span>, user.UserId);
}
<span style="color: blue;">catch</span> (<span style="color: #2b91af;">InvalidOperationException</span>)
{
message = <span style="color: #a31515;">"You must log in. Login Required"</span>;
}
<span style="color: blue;">var</span> dialog = <span style="color: blue;">new</span> <span style="color: #2b91af;">MessageDialog</span>(message);
dialog.Commands.Add(<span style="color: blue;">new</span> <span style="color: #2b91af;">UICommand</span>(<span style="color: #a31515;">"OK"</span>));
<span style="color: blue;">await</span> dialog.ShowAsync();
}
}</pre>
<br />
<br />
Enjoy your code <br /><br /><br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-26702493047413244572014-09-15T02:30:00.000-07:002014-09-15T02:50:24.249-07:00Work with Async <div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: large;">Asynchronous Programming</span><br />
<br />
If you are working with applications such as windows store and Windows
Phone applications you may be found lot of functions that with Async
keyword. Why Async?<br />
We need async because when working with applications that interact with
network (web, local network) , database, Files and reading hardware in
the device are much more slower than the usual execution. Because of it
communication bottlenecks are occur. <br />
<br />
To avoid those communication bottlenecks async is born. <br />
<span style="font-size: large;"><br />
What Async Does ?</span><br />
Async allows to run those delayed tasks in the background and meanwhile
program can do what ever operations that does not depend on the awaited
task. <br />
simply,<br />
"With Async Application can continue with other works that doesn’t depend on blocked resource until the blocked task finished"<br />
<br />
Asynchronous programming available with .NET framework 4,5 onwards with
Visual studio 2012. If you working on visual Studio 2012 without
installing any of other libraries you can work on async<br />
<br />
<span style="font-size: large;">Concepts</span><br />
<br />
<span style="font-size: 20px;">Task</span> <br />
Task encapsulate all units of works in the async. Task contains following properties<br />
<br />
<ul>
<li>State : Running , Finished , Cancelled </li>
<li>Result</li>
<li>Thrown Exceptions </li>
</ul>
It will handle each and every exceptions and it throws all exceptions when task is finished.(await finished) <br />
<br />
<span style="font-size: large;"><br />
Important</span><br />
If you really want to implement async methods and use them remember <b>async </b>and <b>await</b> keywords.<br />
<br />
<b>async </b>keyword informs the compiler this method need to be handle separately by itself. <b>Await</b> keyword indicate the suspension of relative running async task.<br />
<br />
When working with async,<br />
<ul>
<li>Use Async Suffix | e.g. DownloadAsync</li>
<li>Return Task or Task<T> according to situation</li>
<li>void for only event handlers </li>
</ul>
<br />
Example Wpf Code with simple async operation <br />
<br />
<div class="reCodeBlock" style="border: 1px solid rgb(127, 157, 185); overflow-y: auto;">
<div style="background-color: white;">
<span style="margin-left: 0px ! important;"><code style="color: #006699; font-weight: bold;">public</code> <code style="color: #006699; font-weight: bold;">partial</code> <code style="color: #006699; font-weight: bold;">class</code> <code style="color: black;">MainWindow : Window</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 6px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">public</code> <code style="color: black;">MainWindow()</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">InitializeComponent();</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: white;">
</div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">private</code> <code style="color: #006699; font-weight: bold;">void</code> <code style="color: black;">btnNormal_Click(</code><code style="color: #006699; font-weight: bold;">object</code> <code style="color: black;">sender, RoutedEventArgs e)</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">resultTxt.Text = getString(</code><code style="color: blue;">"sample"</code><code style="color: black;">);</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">independentWork();</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: white;">
</div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">private</code> <code style="color: black;">async </code><code style="color: #006699; font-weight: bold;">void</code> <code style="color: black;">btnAsync_Click(</code><code style="color: #006699; font-weight: bold;">object</code> <code style="color: black;">sender, RoutedEventArgs e)</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">resultTxt.Text = await getStringAsync();</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: #f8f8f8;">
</div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// <summary></code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// Method with waiting in synchronize way</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// /// </code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// </summary></code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// <returns></returns></code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">private</code> <code style="color: #006699; font-weight: bold;">string</code> <code style="color: black;">getString(</code><code style="color: #006699; font-weight: bold;">string</code> <code style="color: black;">name)</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: #008200;">//Task.Delay(2000);</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">Thread.Sleep(2000);</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: #006699; font-weight: bold;">return</code> <code style="color: blue;">"My String"</code><code style="color: black;">;</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: #f8f8f8;">
</div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// <summary></code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// same method calling from async</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// </summary></code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// <returns></returns></code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">private</code> <code style="color: black;">async Task<</code><code style="color: #006699; font-weight: bold;">string</code><code style="color: black;">> getStringAsync()</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">Task<</code><code style="color: #006699; font-weight: bold;">string</code><code style="color: black;">> asyncTask = Task.Factory.StartNew(() => getString(</code><code style="color: blue;">"sample"</code><code style="color: black;">));</code></span></div>
<div style="background-color: #f8f8f8;">
</div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">independentWork();</code></span></div>
<div style="background-color: #f8f8f8;">
</div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: #006699; font-weight: bold;">return</code> <code style="color: black;">await asyncTask;</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: white;">
</div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 15px ! important;"> </span></div>
<div style="background-color: white;">
</div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// <summary></code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// this work is independent from others</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: grey;">/// </summary></code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: #006699; font-weight: bold;">private</code> <code style="color: #006699; font-weight: bold;">void</code> <code style="color: black;">independentWork()</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">{</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 30px ! important;"><code style="color: black;">resultTxt.Text += </code><code style="color: blue;">"\n independent work is done "</code><code style="color: black;">;</code></span></div>
<div style="background-color: #f8f8f8;">
<code> </code><span style="margin-left: 18px ! important;"><code style="color: black;">}</code></span></div>
<div style="background-color: white;">
<code> </code><span style="margin-left: 6px ! important;"><code style="color: black;">}</code></span></div>
</div>
<br />
<br />
<br />
<br />
<br />
Download Sample Code <a href="http://gallery.technet.microsoft.com/Async-basic-f80aa626">Here</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-22957190917969396722014-09-13T07:07:00.002-07:002014-09-13T07:07:47.113-07:00Improve Performance of the Application<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-INLw8n3y5IM/VBRFKRgC8qI/AAAAAAAAA14/KiaiRLmTq-I/s1600/index.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-INLw8n3y5IM/VBRFKRgC8qI/AAAAAAAAA14/KiaiRLmTq-I/s1600/index.jpg" /></a></div>
As and software producer all of us want to do is software product with correct functionality. Is that enough ? No. We need to give product with correct functionality with optimum resource consumption as well. <br /><br />Today I'm going to tell you some tips and trikes about resource optimization. basically it is about Memory and CPU resources. <br />
<br />
1. Switch for multiple If <br /> When you are using multiple If conditions ( Most of the time more than 2 ) CPU (Registry level) instructions check as far as use much If with code. It consume more registers in CPU. But with switch it just use check and Jump CPU instruction that far more faster than assignments. Using jump tables makes switches much faster than some if-statements<br /><br />Use switch when ever possible once you find more than two if statements. <br /><br />2. Use structures according to the situation<br />
Execution of class is much more consume resources than class. Whenever you don't need to use functions bind with objects and when you don't go with boxing and unboxing much with code.<br />
<br />
3. Chunky calls<br />
Don't let your functions to handle lot of task by itself. use modularity to avoid it. <br />
<br />
4. Add Collections<br />Never try to assign collection items one by one to the another collection. Just try to use simple casting and try to add entire collection directly. <br />
<br />
5. Working with strings.<br />When you are working with string most of the cases we try to concatenate string by '+'operator.(including me ). But sad story is there is more optimal solution than that. use string bulider to concatenate strings. <br /><br /><a href="http://msdn.microsoft.com/en-us/library/system.text.stringbuilder%28v=vs.110%29.aspx">Here </a>for start.<br /><br />6. Use bits whenever as possible.<br />
I saw most of the programmers use integers/strings to hold the simple states, flags. Please don't do that there is more than 2 states. Just use bit or bool to store states. It will optimize code and resource as well. ( Simply bit is smaller than more bits) <br /><br />7. Array as possible<br />
When we use simple basic array it will helpful to maintain machine instructions(registry). Other collections need more than array because most of them are derived form it. Array is basic element in modern machine instructions. <br />
<br />
8. ObservableCollection vs List <br />Use List whenever that your items not binded with the UI. Observation collections are derived from List and it also holds the property changed notifications. If there is no use of property change go for List. ObservableCollection check the property change when it on use and because of that it consume more.<br />
<br />
9. For than foreach <br />Use while, for and do while loops wherever than foreah. foreach has good performance but basic loops are better than it. <br /><br />10. ToString<br />
Some programmers use ToString method wherever elements are already strings. Use ToString wherever the element that con the string. don't use ToString as habit. With integers use <br />ToStringLookup will optimize memory heap that using with converting integer. <br />
<br />
11. Don't sort collections already sorted. <br />
Check collection already sorted or not before sort it. <br /><br />12. Global variables. <br />Use global variables when you using same type of object frequently <br /><br />13. Constant and static<br />
Constants are not assignable memories but they are easy to load. <br /><br />Static is more faster than instant creations. When load statics no need of run time to check the instance <br />
<br />
<br />
<br />
Hope this is helps...<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-28440535688790920092014-09-10T22:12:00.000-07:002014-09-10T22:12:01.724-07:00Starts with MVVM<div dir="ltr" style="text-align: left;" trbidi="on">
With the growth of programming and application development there are major requrement that emerged the design patterns. Such as MVP(Model View Presentation) and MVC (Model View Controller) are common design patterns that allows developer to isolate codes. Bu the advanced features of XAML such as data biding, data templates, commands and on demand interaction between application and logic's guide world to MVVM (Model View ViewModel) <br /><br />MVVM basically derived from the MVC design pattern. It clearly create separation between these MVVM layers more than MVC. <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img alt="" height="187" src="data:image/png;base64,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" width="640" /><br />
<br />
Model contains all abstraction of data not any logic's behind data. View is contains XAML views still not the logics. Importance is Model and view are not directly inter action with each other. <br />
<br />
<br />
ViewModel Contains all business logic's and data bind properties such as Collections. And it will interact with the View and Model. It takes notifications from model and send them to View as well as other way around. <br />
<br />
Ex: If new item added to collection in view It automatically notify and update the View without any interaction.<br />
<br />
Study Simple MVVM code here <br />
<br />
<br />
<br />
<br />
<br />
<a href="http://bit.ly/MvvMDemo" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-bspc0z9uATU/UZMfXwgUVFI/AAAAAAAAAJ8/3egICM-5HKM/s1600/leopard-folder.png" height="200" width="200" /></a><br />
<br />
<br />
<br />
<br />
<span style="font-size: x-large;">Full Code In Media Fire </span><br />
<span style="font-size: x-large;"><a href="http://bit.ly/MvvMDemo">http://bit.ly/MvvMDemo</a> </span><br />
<br />
<div style="direction: ltr; margin-bottom: 0pt; margin-left: 0in; margin-top: 0pt; text-align: left; unicode-bidi: embed; word-break: normal;">
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><b><span style="font-family: inherit;"> </span></b> </span></span></div>
</div>
<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0tag:blogger.com,1999:blog-5256550553630121746.post-49184578538158341082014-09-10T22:11:00.000-07:002014-09-10T22:11:40.840-07:00Amazing Lumia SensorCore SDK <div dir="ltr" style="text-align: left;" trbidi="on">
<h1 class="title topictitle1">
</h1>
<div class="p">
<a href="http://developer.nokia.com/resources/library/Lumia/SensorCore%20SDK/Images/SensorCore_SDK.png?3c4d013a5d77ee500e3f780e0396c62f" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" class="image align-right" src="http://developer.nokia.com/resources/library/Lumia/SensorCore%20SDK/Images/SensorCore_SDK.png?3c4d013a5d77ee500e3f780e0396c62f" /></a>Lumia SensorCore SDK
is a collection of APIs utilising data from different sensors (for
example, accelerometer) and also location information. This information
can be used to track user’s physical activities and motion. The sensors
are able to run constantly in the background, collecting and preserving
data for up to past ten days. Even though they are constantly active,
the sensors run in a low power mode, consuming only a negligible amount
of battery. Since the sensors may provide access to user’s private data,
data privacy is a critical part of the design. User has always the
option of disabling SensorCore SDK sensors and clearing any collected
data. </div>
<div class="p">
The Lumia SensorCore SDK will be available initially for
Lumia 1520, Lumia Icon, Lumia 930, Lumia 630 and 635, running on Windows
Phone 8.1 with Cyan firmware.</div>
<h2 class="title sectiontitle">
Lumia SensorCore SDK beta </h2>
<div class="p">
<img class="image align-right" src="http://developer.nokia.com/resources/library/Lumia/SensorCore%20SDK/Images/samples.jpg?3c4d013a5d77ee500e3f780e0396c62f" width="300" /> </div>
<div class="p">
The following features are included in Lumia SensorCore SDK beta: </div>
<ul class="ul">
<li class="li"> <strong class="ph b"> Step counter </strong> counts the user's walking and running steps. </li>
<li class="li"> <strong class="ph b"> Activity monitor </strong> determines the current type of motion of the phone and the user. </li>
<li class="li"> <strong class="ph b"> Place monitor </strong> identifies user's home, work, and known visited places. </li>
<li class="li"> <strong class="ph b"> Track point monitor </strong> records location points along the route the user has taken.</li>
</ul>
<div class="p">
Key characteristics of Lumia SensorCore SDK:</div>
<ul class="ul">
<li class="li"> <strong class="ph b"> Power and memory </strong> <strong class="ph b"> efficient. </strong> </li>
<li class="li"> <strong class="ph b"> Secure data storage on the phone. </strong> </li>
<li class="li"> <strong class="ph b"> Access to Motion history for up to past ten days. </strong> </li>
</ul>
<div class="p">
</div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/08324167053842338383noreply@blogger.com0