<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Silverlight Web Services Team : prototype</title><link>http://blogs.msdn.com/silverlightws/archive/tags/prototype/default.aspx</link><description>Tags: prototype</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>POX Proxy Prototype Walkthrough</title><link>http://blogs.msdn.com/silverlightws/archive/2008/03/05/pox-proxy-prototype-walkthrough.aspx</link><pubDate>Wed, 05 Mar 2008 15:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8045383</guid><dc:creator>Yavor Georgiev - MSFT</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/silverlightws/comments/8045383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/silverlightws/commentrss.aspx?PostID=8045383</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Update:&lt;/STRONG&gt; Mahesh wrote a &lt;A class="" title="Step-by-step walkthrough of Ebay POX Proxy Example" href="http://blogs.msdn.com/mahjayar/archive/2008/03/05/step-by-step-guide-to-silverlight-pox-proxy-sample.aspx" target=_blank mce_href="http://blogs.msdn.com/mahjayar/archive/2008/03/05/step-by-step-guide-to-silverlight-pox-proxy-sample.aspx"&gt;detailed&amp;nbsp;step-by-step walkthrough&lt;/A&gt; of how he built the Ebay POX Proxy Example.&lt;/P&gt;
&lt;P&gt;This post discusses the design of a POX Proxy prototype.&lt;/P&gt;
&lt;H4&gt;Current POX/JSON Support&lt;/H4&gt;
&lt;P&gt;SL 2 Beta 1 comes with support for consuming POX/JSON services. &lt;/P&gt;
&lt;P&gt;The user experience is manual: the client has to use &lt;A class="" title="WebClient class" href="http://msdn2.microsoft.com/en-us/library/system.net.webclient(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.net.webclient(VS.95).aspx"&gt;&lt;STRONG&gt;WebClient&lt;/STRONG&gt;&lt;/A&gt; or &lt;A class="" title="HttpWebRequest class" href="http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx"&gt;&lt;STRONG&gt;HttpWebRequest&lt;/STRONG&gt;&lt;/A&gt; (see &lt;A class="" title="How to: Make Requests to HTTP-Based Services" href="http://msdn2.microsoft.com/en-us/library/cc197953(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/cc197953(VS.95).aspx"&gt;How to: Make Requests to HTTP-Based Services&lt;/A&gt;) and then parse the response differently, depending on whether&amp;nbsp;it contains XML or JSON. &lt;/P&gt;
&lt;P&gt;XML can be deserialized in three different ways (see &lt;A class="" title="Working with XML Data in Silverlight " href="http://msdn2.microsoft.com/en-us/library/cc197950(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/cc197950(VS.95).aspx"&gt;Working with XML Data in Silverlight&lt;/A&gt;), with &lt;STRONG&gt;XmlSerializer&lt;/STRONG&gt; being the strongly-typed deserialization option. JSON can only be deserialized using &lt;A class="" title="DataContractJsonSerializer class" href="http://msdn2.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer(VS.95).aspx"&gt;DataContractJsonSerializer&lt;/A&gt;&amp;nbsp;(see &lt;A class="" title="Working with JSON Data in Silverlight" href="http://msdn2.microsoft.com/en-us/library/cc197957(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/cc197957(VS.95).aspx"&gt;Working with JSON Data in Silverlight&lt;/A&gt;), which is also strongly-typed. &lt;/P&gt;
&lt;P&gt;The code would look something like this (assuming we're working with XML, and the&amp;nbsp;&lt;STRONG&gt;User&lt;/STRONG&gt; type has already been defined so that &lt;STRONG&gt;XmlSerilalizer&lt;/STRONG&gt; can deserialize the XML returned into it).&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; HowToMakeRequestsToHttpBasedServices()&lt;BR&gt;{&lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Uri&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; serviceUri = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Uri&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"http://fabrikam.com/service/getUser"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;// Append any parameters to serviceUri, if necessary&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;HttpWebRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; request = (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;HttpWebRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;HttpWebRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Create(serviceUri);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.BeginGetResponse(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;AsyncCallback&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(responseHandler), request);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; responseHandler(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;IAsyncResult&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; asyncResult)&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;HttpWebRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; request = (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;HttpWebRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)asyncResult.AsyncState;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;HttpWebResponse&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; response = (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;HttpWebResponse&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)request.EndGetResponse(asyncResult);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Stream&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; responseStream = response.GetResponseStream();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;XmlSerializer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; serializer = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;XmlSerializer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;User&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; user = (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;User&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;)serializer.Deserialize(responseStream);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use user instance...&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;H4&gt;POX Proxy Prototype&lt;/H4&gt;
&lt;P&gt;&lt;A class="" title="Mahesh's blog" href="http://maheshwar.net/Blog/" target=_blank mce_href="http://maheshwar.net/Blog/"&gt;Mahesh&lt;/A&gt;&amp;nbsp;prototyped a POX Proxy (available &lt;A class="" title="POX Proxy Sample" href="http://code.msdn.microsoft.com/silverlightws/Release/ProjectReleases.aspx?ReleaseId=601" target=_blank mce_href="http://code.msdn.microsoft.com/silverlightws/Release/ProjectReleases.aspx?ReleaseId=601"&gt;here&lt;/A&gt;),&amp;nbsp;which creates a very clean object model to access both POX and JSON, and hides some of the implementation details the current solution relies on.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; TestPoxProxy()&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Instantiate POX proxy with base service address&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;POXProxyRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; request = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;POXProxyRequest&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Uri&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"http://fabrikam.com/service/"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set HTTP request verb&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;request.WebMethod = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"POST"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use RelativeUri to specify operation on service. This allows &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // us&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;to reuse the same proxy instance to call different &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // operations on&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;the service&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;request.RelativeUri = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Uri&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"getUser"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;UriKind&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Relative);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use Dictionary&amp;lt;string, string&amp;gt; QueryParameters to pass any &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // parameters to service&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;request.QueryParameters[&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"apiKey"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;] = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"123456"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Specify if you are sending XML ("text/xml") or JSON &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ("application/json")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;request.ContentType = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"text/xml"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Now prepare the body of the request (using strongly-typed &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // model) by setting &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;properties on an object. See the note at &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the end about where GetUserRequestType &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;comes from.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetUserRequestType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; requestBody = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetUserRequestType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;();&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;requestBody.UserId = 1;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;request.GetResponseCompleted += &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;EventHandler&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetResponseCompletedEventArgs&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;(responseHandler);&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.GetResponseAsync&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetUserRequestType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;(requestBody);&lt;/P&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // request.RequestSerialized and request.ResponseDeSerialized &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // events&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;are available for access to serialized object &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // representations&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; responseHandler(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetResponseCompletedEventArgs&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;POXProxyResponse&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; response = e.Response;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get the data from the response, again using strongly-typed &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // object. Note that &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;this could have been deserialized from either &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // JSON or XML - the proxy&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;automatically decides which serializer &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to use based on the content-type&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;of the HTTP response. See the &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;note at the end about where GetUserResponseType &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;comes from.&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;GetUserResponseType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; responseBody = response.GetResponse&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;GetUserResponseType&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use the response: responseBody.Name, responseBody.Age, etc..&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; The two types &lt;STRONG&gt;GetUserRequestType&lt;/STRONG&gt; and &lt;STRONG&gt;GetUserResponseType&lt;/STRONG&gt; are generated and decorated with the appropriate attributes so that they will serialize into the XML/JSON request/response the service expects. If the schema of the request/response is known, these can be auto-generated by a tool. We'll save this discussion for another post.&lt;/P&gt;
&lt;H4&gt;Ebay POX Proxy Example&lt;/H4&gt;
&lt;P&gt;Mahesh builds a cool app on top of the POX proxy. The app displays the XML/JSON request and response on the right, and a visualization of the returned data on the left.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://code.msdn.microsoft.com/silverlightws/Release/ProjectReleases.aspx?ReleaseId=601"&gt;&lt;IMG title="POX Proxy Sample" style="WIDTH: 500px; HEIGHT: 299px" height=299 alt="POX Proxy Sample" src="http://blogs.msdn.com/photos/silverlightws/images/8056012/original.aspx" width=500 mce_src="http://blogs.msdn.com/photos/silverlightws/images/8056012/original.aspx"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Any comments or thoughts on this design?&lt;/P&gt;
&lt;P mce_keep="true"&gt;Yavor Georgiev&lt;BR&gt;Program Manager&lt;BR&gt;Connected Framework Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8045383" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/silverlightws/archive/tags/samples/default.aspx">samples</category><category domain="http://blogs.msdn.com/silverlightws/archive/tags/json/default.aspx">json</category><category domain="http://blogs.msdn.com/silverlightws/archive/tags/pox/default.aspx">pox</category><category domain="http://blogs.msdn.com/silverlightws/archive/tags/prototype/default.aspx">prototype</category></item></channel></rss>