It's 2008. Where's my flying car? RSS 2.0
 Monday, June 16, 2003

Out of here....

I am taking a week off and will drive up north towards the sea. Computer stays behind. I need a break. Will be back on Saturday and then pack up to go to Dubai and Tunis (for the North Africa Developers Conference) and then to Barcelona for TechEd Europe, which is surely going to be the event highlight of the year. I give five talks in Barcelona, including a chalk talk together with my very newtelligent colleagues:

Chalk Talk: Gotchas from porting DNA to .NET (CHT012)
Speakers: Clemens Vasters, Achim Oellers, Joerg Freiberger 
+ 2 July 2003, 08:30h

Microsoft® .NET Web Services Internals : I Didn't Know You Could Do That!  (WEB404) 
+ 2 July 2003, 18:15h

Loose Coupling an Serialization Patterns : The Holy Grail of Service Design  (WEB400)
+ 3 July 2003, 10:00h

Layers and Tiers (DEV387)
+ 3 July 2003, 18:15h

Aspect-Oriented Programming (DEV359)
+ 4 July 2003, 16:00h

Monday, June 16, 2003 12:20:54 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Sunday, June 15, 2003

SDK

It's neither finished nor perfect, but it's a lot of code and I want to get something out before I leave for my short vacation. A current "daily build" of the newtelligence SDK. May or may not work for you, it does for me. Includes, mostly in source code form, all the base classes I used for the TechEd Demos. Please be advised that everything related to newtelligence.EnterpriseServices.AspectServicedComponent currently breaks with object pooling and leaks lotsa memory in any out-of-process case. Those issues doesn't affect any of the other classes.  Readme, MSI (3.6MB)

Sunday, June 15, 2003 6:56:24 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Saturday, June 14, 2003

It got increasingly difficult to distribute my sample code, because the dependencies on the set of standard libraries that I've built over the past months just keep growing. I fell in the same trap for the "polished" version of the samples for TechEd so that I decided to make a cut and make a whole "SDK" out of this stuff, finally (I think I've written about that a while ago) and simply make it a prerequisite for installing additional demos. That takes away a lot of the repetitive work for building installers over and over again. The MSI file is almost finished and I think I should be able to make a first drop available by tomorrow.

From Monday until the end of the week I will take a desperately needed week of vacation. I'll just get into the car and drive up north to the sea. No computer in the luggage. I won't even try to read email. 

 

Saturday, June 14, 2003 12:41:15 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Thursday, June 12, 2003
Sorry, Testing. Welcome DIPLOMAT, bye bye AMBASSADOR. I just inaugurated a brand new 60GB harddrive for my notebook by installing a new OS and I am finally, finally on Win03 for good. Nothing beats lots of RAM and a fast disk. That notebook is screeeeaaming now.
Thursday, June 12, 2003 9:33:39 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Wednesday, June 11, 2003

Ingo has some new guidance around Remoting. While I don't agree with him on giving any "perfectly okay" marks the WAN case in his feature/scenarios matrix, most of the rules make sense to me for a LAN scenario that doesn't need to scale heavily. Still, the "put state into the database" rule is a bit strict and probably needs a little more thought; after all, the database is just another shared service. Also, in a LAN where security doesn't play much of a role, you probably also don't need to scale unexpectedly as it happens on the web and therefore the whole "host in IIS" and "single call only" business seems a bit strict, too.

And if you didn't believe me until now, here's Ingo with some definitive guidance around ASMX, ES and Remoting that I obviously very much agree with:

  • If you plan on using SOAP Web Services to integrate different platforms or different companies, I really urge you to look into ASMX (ASP.NET) Web Services instead of Remoting.
  • Do not try to fit distributed transactions, security, and such into custom channel sinks. Instead, use Enterprise Services if applicable in your environment.

I summarize his guidance for an old COM guy like myself as:

Whatever was cool with OLE Automation* is cool with Remoting. If the use-case looks much different, look elsewhere. 

*(no security or scalability to worry about, chatty interaction, stateful objects, events, late binding)

Wednesday, June 11, 2003 8:24:06 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

Wednesday, June 11, 2003 1:22:05 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Tuesday, June 10, 2003

"ServicedComponentEx" broken: The code that I published a year ago here in order to fix the dependency of ServicedComponents on the default appdomain (and its config) no longer works with the Framework 1.1. The reason for that is that the cross-appdomain case of Remoting now explicitly filters calls to IRemoteDispatch and rejects them. The way the proxy attribute of my hack works is that it redirects the activation into a different AppDomain and therefore causes a "double proxy" to be created. The proxy that the ES infrastructure talks to is indeed a cross-appdomain proxy which talks to a transparent serviced component proxy in the target appdomain. If a managed call comes in from a different process, it wants to talk to IRemoteDispatch to circumvent COM/Interop (IRemoteDispatch is where the DCOM tunneled binary serializer packages get dropped in) and that call then gets forwarded into the secondary app domain through the cross-appdomain proxy.

Now, in the 1.1 Framework, any IRemoteDispatch calls through Remoting are explicitly rejected and hence the hack no longer works. Bummer. However, I did expect some things to break and this should be a reminder that any hacks in undocumented territory that you may find anywhere are not guaranteed to work in the next version, even point releases of the Framework. I am poking around to get the functionality restored, but based on what I've figured out so far it doesn't really seem possible without either violating the rules of the game in very horrible ways or moving this functionality into the core framework I built to make aspects work .... 

Tuesday, June 10, 2003 6:09:26 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Monday, June 09, 2003

Christians: Herr Weyer gets it (finally) and Herr Nagel started a blog (finally).

Monday, June 09, 2003 4:14:22 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Sunday, June 08, 2003

Craig Andera on why AOP is broken & Why I surprisingly agree and what I am doing about it

Craig Andera has some interesting thoughts around AOP and specifically mentions the stuff that I have been doing in that area. And he say that it doesn't work and never has, because services are never truly orthogonal and have various interdependencies. In essence he's saying (I guess) that because the interdependencies just create a whole new level of complexity, the AOP approach is broken and it's better to generate explicit code instead of using interception techniques. I partially agree and always put a warning at the end of all of my talks around this issue: There is a limited set of use-cases for which an aspect'ish approach is useful. Security, logging, monitoring, billing, transaction enlistment, and a few others.

One of the biggest problems is service-order. You need to run the decryption and signature verification services before you can even evaulate a header that any other service can use. And even then, when you have something like a transaction-enlistment filter, do you open the transaction before or after a logging service wants to write something to a database? Does the logged data need to stay in the logging store when a transaction aborts? Yes? What if the log is used for billing? No? What if the log is used for diagnostics?

However, being explicit when chaining services together doesn't make things any better than using interception:

try
{
   handleServiceA(msg);
   handleServiceB(msg);
   handleServiceC(msg);
}
catch( Exception e )
{
   // do proper handling
}

is just as broken. I don't think it fundamentally matters much how code gets woven into the call chain. Setting up contexts is just one issue. What's even more difficult is to find a way to deal with errors in the presence of cooperating aspects (or, in more general terms, interception services). What's clear is that there's no way around interception-driven services in a web services world. It's all pipeline-based and, even worse, the pipelines are distributed pipelines of pipelines. It's too simple to say "it's broken, get over it". That doesn't help solving what is an actual problem.

A promising approach is to make aspects/interceptors act like resource managers and coordinate their work using a very lightweight 2PC protocol ("AC" guarantee only; no "ID"). Using 2PC for this approach allows interceptors/aspects to coordinate their work and know about each other before any work actually gets done. I have discussed these issues with a couple of people in depth we put some code together that essentially implements a little, in-memory "DTC" for that purpose. We call it a "WorkSet" instead of a transaction.  There's still some work to be done there, but I think I'll be able to post an example in a little while. Maybe around TechEd Europe time.

Sunday, June 08, 2003 8:40:43 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Saturday, June 07, 2003

Sam on Perf

Sam outs himself as a fan of low-level performance optimization. That's all good and fair, but often micro-optimization just takes way too much time with way too little of a result for the overall application throughput and its scalability. For distributed apps, the true optimization happens during the architecture phase. Or, as my friend Steve Swartz put it during our "Scalable Apps" tour: When you are stuck in a traffic jam with a Porsche, all you do is burn more gas in idle. Scalability is about building wider roads, not about building faster cars.

Saturday, June 07, 2003 9:56:09 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

Stuff
About the author/Disclaimer

The content of this site are my own personal opinions and do not represent my employer's view in anyway. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.

© Copyright 2008
Clemens Vasters
Sign In
Statistics
Total Posts: 717
This Year: 11
This Month: 0
This Week: 0
Comments: 1220
Themes
Pick a theme:
All Content © 2008, Clemens Vasters
DasBlog theme 'Business' created by Christoph De Baene (delarou)