Scott Hanselman

Justin And A Hrefhttpradioweblogscom01

December 13, '02 Comments [0] Posted in Web Services | ASP.NET
Sponsored By

Justin and Thomas Wagner are talking about Caching in a Web Farm.  Justin has proposed an extension to the his cache server idea includes a .NET Remoting server that fire events to the local web server caches telling them to invalidate.

I was a team that implemented a Cache-y observer-observable pattern with SQL Server and Triggers (which has been seen many times before, as well as on GotDotNet with Ron Howard's trigger-based ASP.NET Cache Invalidation on Database Change).  Basically the Web Server had endpoints that register for callbacks and the SQL Server lets them know when things change. 

It would be even cleaner if the only observer was the Justin's Cache Server...then it fires event back (via Remoting, whatever) to the Web Server caches.  But, I digress.  The real opinion I wanted to get out was that I personally believe two philosophies of cache invalidation, for simplicity, whenever possible. 

One: Explicit Pull - When the the client of the cache knows when it explicitly needs the latest stuff, it includes says so explicitly.  All other calls that don't include this explicit modifier, come from the cache, which may or may not invalidate over time or n number of calls.

Two:  Invalidate For Equally Acceptable But Not As Time Consuming Or Complex Other Reasons - I just don't think that the trouble one usually has to go to to create foolproof interrupt based cache invaliation is worth the effort.  Instead, a real business analysis of what "real time" means to the user.  Follow the ubiquitous and ever useful (for my purposes) 80/20 rule.  If I can get a performance hit even caching something a few seconds then use a time based invalidation. 

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Current Project Command Pr

December 12, '02 Comments [0] Posted in Web Services | Tools
Sponsored By

Current Project Command Prompt for VS.NET. Another answer from the VS.NET Info Center Q&A Forum describing how to start a command prompt and the file explorer in the directory of the current project. [sellsbrothers.com: Windows Developer News]

I found this to be a very useful tip.  I noticed that Chris appeared to be running VS.NET out of, logically, C:\VS.NET, when the default is C:\Program Files\Microsoft Visual Studio.NET.  I ended up using Short File Names ala cmd /k c:\PROGRA~1\MICROS~3.NET\Common7\Tools\vsvars32.bat as no combination of quoted long file names seemed to work. 

Great tip though, so I added two external tools, one for the Command Shell in Project Dir and Windows Explorer in Project Dir.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Google Weblog Announcing Froogle A Hrefhttpwwwjepstonene

December 12, '02 Comments [0] Posted in Musings
Sponsored By

Google Weblog: Announcing Froogle! [Brian Jepson's Radio Weblog]

Ah!  A competitor for http://www.mysimon.com!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

I Ran All Over The Net Via Google And Google Groups This Evening Trying To Figure Out The Answer To What I Thought

December 11, '02 Comments [0] Posted in Web Services | ASP.NET | XML | Tools
Sponsored By

I ran all over the Net (via Google and Google Groups) this evening trying to figure out the answer to what I thought was a simple question.  Everywhere I turned I found pieces of what I wanted to do...clues...but not even close to the whole solution (isn't that always the way?). So, when I DID figure it out (for better or worse) I wanted to put the solution out in the world, lest I forget it, so if some poor schmoe needs to go looking for it him/herself.

I've got a very constrained environment in this instance, with ASP (not ASP.NET) on the client side, calling a Java WebService that includes a Base64 encoded image.  I wanted to get the image out of the soap envelope WITHOUT touching the disk. The data in the image is very sensitive and it can't be saved.

I know this is easy, and done basically automatically with serialization in ASP.NET...heck, most SOAP stacks handle this kind of stuff for you...I guess I just made it harder than it needed to be in Classic ASP.  I found all sorts of interesting stuff, including an online Base64 decoder, and one guy who actually wrote a BASE64 Decoder entirely in VBScript (which was, not surprisingly more effort than I was willing to handle today)!

The Proof of Concept result is this snippet of ASP/VBScript code...sigh...these things are so obvious AFTER they've been written!

<%
Dim mDoc
Set mDoc = Server.CreateObject("MSXML2.DOMDocument")
mDoc.async = false
mDoc.ValidateOnParse = false
'NOTE: The REAL xml file will come from inside our SOAP Envelope when it comes over from the SOAP/REST call to the Java WS
mDoc.Load Server.MapPath(".") + "\\sample.xml"
   
Dim oNode
Set oNode = m_Doc.selectSingleNode("/Envelope/Body/ImgQryRs/imgBin64")
'NOTE: I had to force the dataType to bin.base64 since there wasn't yet an XSD available to declare it was so.
oNode.dataType = "bin.base64"
Response.ContentType="image/JPEG"
Response.BinaryWrite oNode.nodeTypedValue
%>

Interesting things about this:

  • MSXML is smarter than I thought when using nodeTypedValue (accessing the property when the dataType is a bin.base64 causes an implicit conversion to a byte array)
  • Response.BinaryWrite in ASP is pretty darn useful, even in this typeless varient-y world of Classic ASP
  • When there's no XSD available (duh!) then nodeTypedValue doesn't work well! :)

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.