<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4139695124086998522</id><updated>2011-11-27T17:31:34.465-08:00</updated><category term='wcf'/><category term='jquery'/><category term='sql'/><category term='generics'/><category term='ajax'/><category term='json'/><title type='text'>Satchmo's .NET discoveries</title><subtitle type='html'>Small, but personally important, discoveries about .NET that I don't wanna forget. Mostly stuff about C#, Linq, WCF and Extensions.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-549598648581071257</id><published>2008-09-29T02:13:00.000-07:00</published><updated>2008-09-29T02:23:59.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Nifty SQL procedure to generate sql export (MSSQL)</title><content type='html'>I like the mysqldump, it generates sql insert statements for your data, making it extremely simple to move your data between developers.&lt;br /&gt;This feature is lacking (to my knowledge) from the Import/Export within SQL Management Studio. So after some googling, I found a couple of shareware programs doing it, but I also found a stored procedure doing the same thing - for free.&lt;br /&gt;&lt;br /&gt;Here's the link:&lt;br /&gt;&lt;a href="http://vyaskn.tripod.com/code/generate_inserts_2005.txt"&gt;http://vyaskn.tripod.com/code/generate_inserts_2005.txt&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-549598648581071257?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/549598648581071257/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=549598648581071257' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/549598648581071257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/549598648581071257'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/09/nifty-sql-procedure-to-generate-sql.html' title='Nifty SQL procedure to generate sql export (MSSQL)'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-4096273905076948387</id><published>2008-06-25T08:50:00.000-07:00</published><updated>2008-06-25T09:27:45.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><title type='text'>Converting generic lists of concrete class to lists of implemented interface</title><content type='html'>&lt;div style="font-family:Arial, Helvetica, sans-serif;font-size:small;"&gt;&lt;br /&gt;  &lt;p&gt;Have you noticed that if you fill a generic List with a concrete class that implements an interface, the generic List does not think it is filled with objects of that interface? And you can't cast the list to a List of the interface.&lt;/p&gt;&lt;br /&gt;  &lt;p&gt;Let's look at a simple example where we have an IPerson interface and a concrete class, Person, implementing IPerson:&lt;/p&gt;&lt;br /&gt;  &lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; ConvertingGenericLists&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;  &lt;p&gt;Nothing strange. However, if we create a List&amp;lt;Person&amp;gt; it is not a List&amp;lt;IPerson&amp;gt; and the compiler will not tolerate a cast like (List&amp;lt;IPerson&amp;gt;).&lt;br /&gt;&lt;br /&gt;    However, every element in the list is both of type Person and IPerson, but the list itself is of Person.&lt;br /&gt;&lt;br /&gt;    The neat trick is to use the ConvertAll()-method in List and with a simple lambda-method convert it.&lt;br /&gt;&lt;br /&gt;    Like this (PersonList is a List&amp;lt;Person&amp;gt;):&lt;br /&gt;  &lt;br /&gt;  &lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;IPersonList = PersonList.ConvertAll(c =&amp;gt; (&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;) c);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;  &lt;/p&gt;&lt;br /&gt;  &lt;p&gt;Now the lists contents is that of the interface, but as you will see in the code below, every element is still of IPerson &lt;em&gt;and&lt;/em&gt; Person.  &lt;/p&gt;&lt;br /&gt;  &lt;p&gt;And here is a complete example using NUnit tests:&lt;/p&gt;&lt;br /&gt;  &lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; NUnit.Framework.SyntaxHelpers;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; ConvertingGenericLists&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestFixture&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Tests&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt; PersonList;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&amp;gt; IPersonList;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestFixtureSetUp&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Setup()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PersonList = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; {Name = &lt;span style="color: #a31515;"&gt;"Aurel"&lt;/span&gt;},&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; {Name = &lt;span style="color: #a31515;"&gt;"Thomas"&lt;/span&gt;},&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; {Name = &lt;span style="color: #a31515;"&gt;"Lasse"&lt;/span&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//And the magic of ConvertAll() and lamdba:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IPersonList = PersonList.ConvertAll(c =&amp;gt; (&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;) c);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;Test&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; PersonList_Is_Of_Base_Type_Only()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(PersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(PersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(PersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//An element in PersonList is indeed of type IPerson:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(PersonList[0], &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//But PersonList is not a list of IPersons!&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(PersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.Not.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;Test&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; IPersonList_Is_A_List_Of_IPerson()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//IPersonlist is not of the implementing type anymore:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.Not.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.Not.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList, &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.Not.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//But an element in IPersonList is STILL a Person and a IPerson!&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList[0], &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.That(IPersonList[0], &lt;span style="color: #2b91af;"&gt;Is&lt;/span&gt;.InstanceOfType(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IPerson&lt;/span&gt;)));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-4096273905076948387?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/4096273905076948387/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=4096273905076948387' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/4096273905076948387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/4096273905076948387'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/06/converting-generic-lists-of-base-type.html' title='Converting generic lists of concrete class to lists of implemented interface'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-4064169847779531362</id><published>2008-05-02T08:50:00.000-07:00</published><updated>2008-05-02T09:15:51.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Calling WCF from jQuery using parameters</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;p&gt;This continues our discoveries in the articles "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/04/returning-true-json-from-wcf-services.html"&gt;Returning true JSON from WCF services&lt;/a&gt;", "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html"&gt;Return JSON from Ajax-enabled WCF Service&lt;/a&gt;" and "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/using-jquery-with-json-enabled-wcf.html"&gt;Using jQuery with JSon-enabled WCF Services&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;We will now add two parameters to our DoWork-method and supply them when we call them using jQuery.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Open up the "AjaxEnabled.svc.cs" and add two parameters, string name and int id:&lt;/p&gt;&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Activation;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Web;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;ServiceContract&lt;/span&gt;(Namespace = &lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;AjaxEnabled&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:green;"&gt;// Add [WebGet] attribute to use HTTP GET&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;OperationContract&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;(ResponseFormat=&lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageFormat&lt;/span&gt;.Json,BodyStyle = &lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageBodyStyle&lt;/span&gt;.Bare)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; DoWork(&lt;span style="color:blue;"&gt;string&lt;/span&gt; name, &lt;span style="color:blue;"&gt;int&lt;/span&gt; id)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; returnObject = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                &lt;span style="color:green;"&gt;//Use our fresh parameters:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                Id = id,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                Name = name,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                &lt;span style="color:green;"&gt;//Added a call to HttpContext.Current:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                NoPublicGet = &lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt;.Current.Request.RawUrl,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                IHaveNoDataMemberAttribute = &lt;span style="color: rgb(163, 21, 21);"&gt;"Meaningless"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                InternalProperty = 155&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt; returnObject;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:green;"&gt;// Add more operations here and mark them with [OperationContract]&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then try to run it with the url "AjaxEnabled.svc/DoWork?name=Zlatan&amp;amp;id=8". Your answer should be:&lt;br /&gt;&lt;br /&gt;  {"Id":8,"InternalProperty":155,"Name":"Zlatan","NoPublicGet":"\/AjaxEnabled.svc\/DoWork?name=Zlatan&amp;amp;id=8"}&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Make (or add to our previous example) a web page like this (note that in our example there is no check that the number-field only provides an integer):&lt;/p&gt;&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:red;"&gt;html&lt;/span&gt; &lt;span style="color:red;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color:blue;"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="color:blue;"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;html&lt;/span&gt; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Test jQuery, WCF and JSon&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="script/jquery-1.2.2.js"&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    $().ready(&lt;span style="color:blue;"&gt;function&lt;/span&gt;()    &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        $(&lt;span style="color: rgb(163, 21, 21);"&gt;"#myButt"&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            $.getJSON(&lt;span style="color: rgb(163, 21, 21);"&gt;"TrueJSON.svc/DoWork"&lt;/span&gt;,&lt;span style="color:blue;"&gt;function&lt;/span&gt;(data)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                alert(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name="&lt;/span&gt; + data.Name + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nId="&lt;/span&gt; + data.Id + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nNoPublicGet="&lt;/span&gt;+data.NoPublicGet + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nInternalProperty="&lt;/span&gt; + data.InternalProperty );&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        $(&lt;span style="color: rgb(163, 21, 21);"&gt;"#parameterButt"&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; nameValue=$(&lt;span style="color: rgb(163, 21, 21);"&gt;"#name"&lt;/span&gt;).val();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; idValue=$(&lt;span style="color: rgb(163, 21, 21);"&gt;"#id"&lt;/span&gt;).val();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            $.getJSON(&lt;span style="color: rgb(163, 21, 21);"&gt;"AjaxEnabled.svc/DoWork"&lt;/span&gt;,{name:nameValue,id:idValue},&lt;span style="color:blue;"&gt;function&lt;/span&gt;(data)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                alert(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name="&lt;/span&gt; + data.Name + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nId="&lt;/span&gt; + data.Id + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nNoPublicGet="&lt;/span&gt;+data.NoPublicGet + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nInternalProperty="&lt;/span&gt; + data.InternalProperty );&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="button"&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="Get values from server"&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="myButt"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text"&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="name"&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="Zlatan"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text"&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="id"&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="8"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="button"&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="Get values from server, call with parameters"&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="parameterButt"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nice, isn't it?&lt;br /&gt;&lt;br /&gt;That concludes this article-series about using WCF services with jQuery.&lt;br /&gt;&lt;br /&gt;Good luck!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-4064169847779531362?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/4064169847779531362/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=4064169847779531362' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/4064169847779531362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/4064169847779531362'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/05/calling-wcf-from-jquery-using.html' title='Calling WCF from jQuery using parameters'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-8182057480903896042</id><published>2008-05-02T08:45:00.000-07:00</published><updated>2008-05-02T09:16:56.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Using jQuery with JSon-enabled WCF Services</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;This continues our discoveries in the articles "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/04/returning-true-json-from-wcf-services.html"&gt;Returning true JSON from WCF services&lt;/a&gt;" and "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html"&gt;Return JSON from Ajax-enabled WCF Service&lt;/a&gt;", and will explain how we call our service from &lt;a href="http://jquery.com/" title="jQuery" target="_blank"&gt;jQuery&lt;/a&gt; using the &lt;a href="http://docs.jquery.com/Ajax/jQuery.getJSON" title="getJSON" target="_blank"&gt;$.getJSON&lt;/a&gt;-call.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Download the .js file from &lt;a href="http://jquery.com/"&gt;http://jquery.com/&lt;/a&gt;, make a html or aspx-page and point a script-src-tag to the downloaded script.&lt;br /&gt;&lt;br /&gt;Below I have added a simple jQuery-script that gets our example-data from the WCF service and alerts the results.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:red;"&gt;html&lt;/span&gt; &lt;span style="color:red;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color:blue;"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="color:blue;"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;html&lt;/span&gt; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Test jQuery, WCF and JSon&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="script/jquery-1.2.2.js"&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    $().ready(&lt;span style="color:blue;"&gt;function&lt;/span&gt;()    &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        $(&lt;span style="color: rgb(163, 21, 21);"&gt;"#myButt"&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            $.getJSON(&lt;span style="color: rgb(163, 21, 21);"&gt;"TrueJSON.svc/DoWork"&lt;/span&gt;,&lt;span style="color:blue;"&gt;function&lt;/span&gt;(data)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                alert(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name="&lt;/span&gt; + data.Name + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nId="&lt;/span&gt; + data.Id + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nNoPublicGet="&lt;/span&gt;+data.NoPublicGet + &lt;span style="color: rgb(163, 21, 21);"&gt;"\nInternalProperty="&lt;/span&gt; + data.InternalProperty );&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="button"&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="Get values from server"&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="myButt"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Simple, isn't it?&lt;br /&gt;&lt;br /&gt;If you are unfamiliar with the jQuery syntax, read more about it on &lt;a href="http://jquery.com/"&gt;http://jquery.com/&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ok, lets move on, now we are going to wrap things up and show how we can send in some parameters to our WCF Service in the article "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/calling-wcf-from-jquery-using.html"&gt;Calling WCF from jQuery using parameters&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-8182057480903896042?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/8182057480903896042/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=8182057480903896042' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8182057480903896042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8182057480903896042'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/05/using-jquery-with-json-enabled-wcf.html' title='Using jQuery with JSon-enabled WCF Services'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-8544713218957150243</id><published>2008-05-02T08:43:00.000-07:00</published><updated>2008-05-02T09:09:21.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Accessing HttpContext.Current from WCF Service</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt; &lt;p&gt;By default, when you create an new WCF Service in a web site, they live side-by-side and the WCF service cannot access the HttpContext.Current-object (and the other ASP.NET-features like File/URL-authorization, HttpModules and ASP.NET impersonation), and in some Ajax-scenarios, we really need it.&lt;/p&gt;&lt;br /&gt; &lt;p&gt;There are two simple steps for enabling it.&lt;br /&gt;&lt;br /&gt; First, you need to turn it on in the web config, look for "&lt;span style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.serviceModel&lt;/span&gt;&lt;/span&gt;" and add the "&lt;span style="color: rgb(163, 21, 21);"&gt;serviceHostingEnvironment&lt;/span&gt;"-tag like this:&lt;/p&gt;&lt;br /&gt; &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt; &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt; &lt;p&gt;Second, add the attribute "&lt;span style="margin: 0px;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Required)]&lt;/span&gt;" to your service-class (it can't be in the interface):&lt;br /&gt; &lt;/p&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Activation;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// NOTE: If you change the class name "TrueJSON" here, you must also update the reference to "TrueJSON" in Web.config.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Required)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TrueJSON&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;ITrueJSON&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; DoWork()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; returnObject = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    Id = 1, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    IHaveNoDataMemberAttribute = &lt;span style="color: rgb(163, 21, 21);"&gt;"Meaningless"&lt;/span&gt;, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Satchmo"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    NoPublicGet = &lt;span style="color: rgb(163, 21, 21);"&gt;"Hello world!"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    InternalProperty = 155&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt; returnObject;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt; &lt;p&gt;And you are done!&lt;/p&gt;&lt;br /&gt; &lt;p&gt;MSDN documentation &lt;a href="http://msdn.microsoft.com/en-us/library/aa702682.aspx" title="AspNetCompabilityRequirements"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-8544713218957150243?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/8544713218957150243/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=8544713218957150243' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8544713218957150243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8544713218957150243'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/05/accessing-httpcontextcurrent-from-wcf.html' title='Accessing HttpContext.Current from WCF Service'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-1001529848288618108</id><published>2008-05-02T08:37:00.000-07:00</published><updated>2008-05-02T09:05:07.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Return JSON from Ajax-enabled WCF Service</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt; &lt;p&gt;This is another way to return JSON from WCF than I described in the previous article "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/04/returning-true-json-from-wcf-services.html"&gt;Returning true JSON from WCF services&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt; As in that article, this method was discovered using trail-and-error, and some Googling. I have not studied WCF in depth, I just barely learn what I need to, so there may very well be some better way to do it, I just haven't been able to find it yet.&lt;/p&gt;&lt;br /&gt; &lt;ol&gt;&lt;br /&gt;   &lt;li&gt;In a web project, "Add new item.." and choose "Ajax-enabled WCF Service", let's call it "AjaxEnabled.svc"&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;This service is made without an interface to specify the methods (i.e. no "IAjaxEnabled.cs" was created as it would have done if you choose to add a new WCF Service like in the previous article), and consists of the single method DoWork(). &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Let's create something to return, add the "MyClass" from the other article and replace the method DoWork() from there too.&lt;br /&gt;&lt;br /&gt;     Add the &lt;span style="margin: 0px;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;]&lt;/span&gt; attribute too, since there doesn't seem to be a &lt;a href="http://dev.jquery.com/ticket/197" title="$.postJSON" target="_blank"&gt;$.postJSON&lt;/a&gt;-function in jQuery.&lt;br /&gt;&lt;br /&gt;     You should now have an AjaxEnabled.svc.cs that looks like:&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Activation;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Web;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;ServiceContract&lt;/span&gt;(Namespace = &lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;AjaxEnabled&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:green;"&gt;// Add [WebGet] attribute to use HTTP GET&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;OperationContract&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; DoWork()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; returnObject = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                Id = 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                IHaveNoDataMemberAttribute = &lt;span style="color: rgb(163, 21, 21);"&gt;"Meaningless"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Satchmo"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                NoPublicGet = &lt;span style="color: rgb(163, 21, 21);"&gt;"Hello world!"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                InternalProperty = 155&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt; returnObject;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:green;"&gt;// Add more operations here and mark them with [OperationContract]&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Let's try it out, run the project and call the service with adding /DoWork to the AjaxEnabled.svc-url. You should've got:&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;MyClass&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://schemas.datacontract.org/2004/07/Alaz.DotNetDiscoveries.JSONWithWCF&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns:i&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Id&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Id&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;InternalProperty&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;155&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;InternalProperty&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Satchmo&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;NoPublicGet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Hello world!&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;NoPublicGet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;MyClass&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Not really what we've  wanted, apparently MS Ajax implementation use xml to communicate. Time to fiddle with some settings then:&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Add the ResponseFormat-property to WebGet, and set it to Json (default seems to be xml):&lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;(ResponseFormat=&lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageFormat&lt;/span&gt;.Json)]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;   &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;    Run again, inspect the response in notepad, and now we got some Json, but not really in the format we would like to:&lt;br /&gt;&lt;br /&gt;   {"d":{"__type":"MyClass:#Alaz.DotNetDiscoveries.JSONWithWCF","Id":1,"InternalProperty":155,"Name":"Satchmo","NoPublicGet":"Hello world!"}}&lt;br /&gt;&lt;br /&gt;   There seem's to be some envelope around it. Let's remove it:&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Set the BodyFormat-property to Bare, we do not wan't to have Wrapped messages, only bare Json:&lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;(ResponseFormat=&lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageFormat&lt;/span&gt;.Json,BodyStyle = &lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageBodyStyle&lt;/span&gt;.Bare)]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;   &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Run again, and you will get an error:&lt;br /&gt;&lt;br /&gt;   &lt;pre&gt;Server Error in '/' Application.&lt;br /&gt;&lt;br /&gt;   --------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;   The body style 'Bare' is not supported by 'WebScriptEnablingBehavior'. Change the body style to be 'WrappedRequest'.&lt;/pre&gt; &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;We must change something in the web.config, look at this tag:&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;     &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.AjaxEnabledAspNetAjaxBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;enableWebScript&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;     &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;   &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Change "enableWebScript" to "webHttp" like this:&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.AjaxEnabledAspNetAjaxBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 0);"&gt;webHttp&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;   The behavior is connected to:&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;service&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.AjaxEnabled&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpoint&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;address&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;""&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue; background-color: rgb(255, 255, 0);"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.AjaxEnabledAspNetAjaxBehavior&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;     &lt;/span&gt;&lt;span style="color:red;"&gt;binding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;webHttpBinding&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;contract&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.AjaxEnabled&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;   &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;service&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;   &lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Run again, and now you got the correct Json-string {"Id":1,"InternalProperty":155,"Name":"Satchmo","NoPublicGet":"Hello world!"}.&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;One more thing worth mention is the &lt;a href="http://msdn.microsoft.com/en-us/library/aa702682.aspx" title="AspNetCompatibilityRequirements" target="_blank"&gt;AspNetCompatibilityRequirements&lt;/a&gt;-attribute to the service-class:&lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;   If you want to access the current HttpContext, using ASP.NET's file/url authorization and that normal ASP.NET-stuff you must use either &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed as in this example, or &lt;span style="color: rgb(43, 145, 175);"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Required. My advice is to use Required if you need any of the ASP.NET-features, then the service throws an error if it is not enabled. You must enable this in the web.config (however, the "Add new Ajax-enabled WCF service" seems to add it automagically):&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;   &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;If "Allowed" you can run it even if web.config says "false", and you could have a hard time finding out why HttpContext.Current is null.&lt;br /&gt;   &lt;/li&gt;&lt;br /&gt; &lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-1001529848288618108?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/1001529848288618108/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=1001529848288618108' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/1001529848288618108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/1001529848288618108'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html' title='Return JSON from Ajax-enabled WCF Service'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4139695124086998522.post-8809874408326193260</id><published>2008-04-29T01:29:00.000-07:00</published><updated>2008-05-02T09:10:08.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Returning true JSON from WCF services</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;p&gt;In a current project I desperately wanted to use jQuery in the frontend for doing some nice Ajax-stuff. I don't really care for Microsoft's implementation of ASP.NET AJAX, I've used it in some earlier projects. Anyway, this time my goal was to use the jQuery &lt;a href="http://docs.jquery.com/Ajax/jQuery.getJSON" title="getJSON" target="_blank"&gt;$.getJSON&lt;/a&gt; - function to pull data from the server. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;At first, I just did an aspx-page and did an output with a ToJSON-extension (see &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx" title="ToJSON" target="_blank"&gt;Scott Guthrie's blogpost&lt;/a&gt;). No sin in that ofc, but not very elegant or practical, especially if you would like to send in some parameters. The elegant solution would be to use WCF services. With some nifty attributes and some additional parameters in web.config, it worked. This method was discovered using trail-and-error, and some Googling. I have not studied WCF in depth, I just barely learn what I need to, so there may very well be some better way to do it, I just haven't been able to find it yet.&lt;br /&gt;&lt;br /&gt;This is how I did it using Visual Studio 2008:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Create an ASP.NET Web Application (would surely work with ASP.NET Web Site too, but I prefer the Web Application)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;    Add a new item, a WCF Service (not "Ajax-enabled WCF-service, we'll look at it in the next article), lets call it TrueJSON.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You now have an WCF-service with .svc as extension, and that service implements an Interface. It's in the interface we'll set the attributes needed to return JSON.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a class, MyClass as below. The attributes "DataContract" and "DataMember" must be defined for the class and the properties that would be returned through the WCF service. As you will see later on, so the WCF service will return everything marked as "DataMember", even if there is a private get.&lt;br /&gt;&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Runtime.Serialization;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;DataContract&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;DataMember&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; Id { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;DataMember&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; IHaveNoDataMemberAttribute { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;DataMember&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; NoPublicGet { &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;DataMember&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;ushort&lt;/span&gt; InternalProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now add a reference to System.ServiceModel.Web (this is where the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx" title="WebGet Attribute" target="_blank"&gt;WebGet&lt;/a&gt;-attribute is located).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change return type of the function DoWork() to MyClass, and add the WebGet-attribute as specified below. The &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.web.webmessagebodystyle.aspx" title="WebMessageBodyStyle" target="_blank"&gt;BodyStyle Bare&lt;/a&gt; means "Both requests and responses are not wrapped" - we really want nothing more than a true JSON-response. The &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.web.webmessageformat.aspx" title="WebMessageFormat"&gt;ResponseFormat&lt;/a&gt; should of course be "Json".&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.ServiceModel.Web;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// NOTE: If you change the interface name "ITrueJSON" here, you must also update the reference to "ITrueJSON" in Web.config.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    [&lt;span style="color: rgb(43, 145, 175);"&gt;ServiceContract&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;interface&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ITrueJSON&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;OperationContract&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        [&lt;span style="color: rgb(43, 145, 175);"&gt;WebGet&lt;/span&gt;(ResponseFormat = &lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageFormat&lt;/span&gt;.Json, BodyStyle = &lt;span style="color: rgb(43, 145, 175);"&gt;WebMessageBodyStyle&lt;/span&gt;.Bare)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; DoWork();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lets look at the class TrueJSON, change the return type of DoWork() to MyClass, and create something to return:&lt;br /&gt;&lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Alaz.DotNetDiscoveries.JSONWithWCF&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// NOTE: If you change the class name "TrueJSON" here, you must also update the reference to "TrueJSON" in Web.config.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TrueJSON&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;ITrueJSON&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; DoWork()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;var&lt;/span&gt; returnObject = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyClass&lt;/span&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    Id = 1, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    IHaveNoDataMemberAttribute = &lt;span style="color: rgb(163, 21, 21);"&gt;"Meaningless"&lt;/span&gt;, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Satchmo"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    NoPublicGet = &lt;span style="color: rgb(163, 21, 21);"&gt;"Hello world!"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                    InternalProperty = 155&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;                };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt; returnObject;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you try to run the service and call it with url TrueJSON.svc/DoWork (we did actually with WebGet specified we wanted to use Get-calls) nothing happens, no response at all, not even "not found". We need to continue to web.config and make some adjustments.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In web config, start with changing "&lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.wshttpbinding.aspx" title="wsHttpBinding" target="_blank"&gt;wsHttpBinding&lt;/a&gt;" to "&lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.webhttpbinding.aspx" title="webHttpBinding" target="_blank"&gt;webHttpBinding&lt;/a&gt;" (we are not working with Web Services now), then add the whole &lt;span style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; section below with our self-named behavior "JsonBehavior". Now add the &lt;span style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;JsonBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt; attribute to the service-tag.&lt;br /&gt;&lt;br /&gt; &lt;div    style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.TrueJSONBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceMetadata&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceDebug&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue; background-color: rgb(255, 255, 0);"&gt;JsonBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;webHttp&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behavior&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;services&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;service&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.TrueJSONBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.TrueJSON&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpoint&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;address&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;""&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;binding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue; background-color: rgb(255, 255, 0);"&gt;webHttpBinding&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;contract&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Alaz.DotNetDiscoveries.JSONWithWCF.ITrueJSON&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue; background-color: rgb(255, 255, 0);"&gt;JsonBehavior&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;identity&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;dns&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;localhost&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;identity&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpoint&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;endpoint&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;address&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;mex&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;binding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;mexHttpBinding&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;contract&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;IMetadataExchange&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;service&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;services&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ok, time to try it out, start the project and point the url to TrueJSON.svc/DoWork. Save the file (add .txt for convenience) then open in notepad. The result reads: {"Id":1,"InternalProperty":155,"Name":"Satchmo","NoPublicGet":"Hello world!"} and all is well! If you examine the headers, you will see: Content-Type: application/json; charset=utf-8 and that is really good to.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;By default, WCF services lives outside the ASP.NET pipeline, so without more configuration, you have no HttpContext.Current, authorization, impersonation and so forth. To enable it, look at the article "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/accessing-httpcontextcurrent-from-wcf.html"&gt;Enabling HttpContext in WCF Services&lt;/a&gt;".&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;That was one method to do it, an alternative way to make WCF Service return true JSON is described in "&lt;a href="http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html"&gt;Return JSON from Ajax-enabled WCF Service&lt;/a&gt;".&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4139695124086998522-8809874408326193260?l=dotnetdiscoveries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdiscoveries.blogspot.com/feeds/8809874408326193260/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4139695124086998522&amp;postID=8809874408326193260' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8809874408326193260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4139695124086998522/posts/default/8809874408326193260'/><link rel='alternate' type='text/html' href='http://dotnetdiscoveries.blogspot.com/2008/04/returning-true-json-from-wcf-services.html' title='Returning true JSON from WCF services'/><author><name>Satchmo</name><uri>http://www.blogger.com/profile/03873316998008786028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_u_63MqveFF8/SX7WhzmIYaI/AAAAAAAAAmw/HhEu6SESkyw/S220/LasseSimzonized.png'/></author><thr:total>1</thr:total></entry></feed>
