Welcome to Windows Communication Foundation (WCF)
Top Tasks :

WCF Community Bloggers

Browse by Tags

All Tags » Agile Developme... » COM Interop   (RSS)

  • A Beasty COM Interop Problem

    This is one reason why Scott Hanselman calls me an "Interop Beast" -)). We had a thorny COM Interop issue that was causing a crash in certain machine types. Every single pair on the team had worked on it for many hours this week in our Ship Cycle without success. It should have been solved since I was feeding them all the usual Marshal.ReleaseComObject crap again but it refused to be cleaned up. If you remember back from my posts in 2002 , while working with 10 million+ plus lines of COM to interoperate with while I was at Groove, I had run into many thorny lifetime issues. As a review, (for more information read my MSDN articles here and here ), the Runtime Callable Wrapper is a "bridge" between the two very different worlds of managed CLR code and unmanaged code. Its job is to hide all that ugly COM crap from the goodness that is the CLR and feel, smell and taste like any other CLR object. To do this it must perform a tough job as the COM world is completly deterministic and the CLR is completly not as the GC runs when it feels like it. The RCW (usually) has one and only one unmanaged COM reference to the underlying COM object. The problem comes that when you are done using the RCW on the CLR side, you are marking the RCW class for GC but when that GC runs is complelty non-determinstic and probably not going to happen that split second. The issue is that COM wants references cleaned up right away (ref counts-- until 0) and killing off that object or bad things happen, like crashes. So, the RCW is still holding on to that reference while waiting for GC and the underlying reference is still being held. BOOM, comes the crash in many cases, like we faced. In the case, we were trying to interoperate with some old VB6 COM objects from an old legacy previous version of our product that was being driven by a command line script. The first thing is that IDisposale was not completly implemented and so I did this: public void Dispose() { Dispose(true); GC.SuppressFinalize(this); Read More...
  • Our Agile Project Goes into Ship/Performance Mode

    So, I have been writing a bunch of posts over the last 14 months, how we have been using Agile, actually full Extreme Programming practices to build a multi-million dollar Enterprise Software platform and application for the banking sector. We certainly have seriously stressed Extreme Programming/Agile techniques to their limits as this is not a small piece of software, but a large Enterprise solution that gets sold into the top banks in the world. We certainly have proven that you can use Extreme Programming/Agile techniques to build a 1.8 million dollar Enterprise product family. have talked about being an Agile Architect and why it's neccessary, how we went to CTP in July , the Process we use, our tools , and even our failings . So, after 48 Iterations we finished all the functionality we had agreed with Business was necessary for a "Phase I" delivery of our Next Generation/V5.0 product, as our Next Generation architecture will span an ambitious set of goals and products on top of this platform. Business and Development agreed together that we would stop and start a three week Iteration of fixing bugs in our backlog, testing and eating our dog food. In Extreme Programming, you are really not supposed to carry over bugs out of the Iteration but this was extremely hard with one week Iterations. We turned out very well overall as all the testing found just over 100 total bugs for 14 months work which is an order of magnitude less bugs than our previous product development techniques. In addition, we have over 1,000 unit tests and the code is well factored, clean and maintanable. The best part is the whole team understands it, not individuals. I actually haven't written about it but I have been working as Agile Architect the last few months on the next phase and not as part of the Iterations directly. These involve a whole lot of Workflow, Reporting and much more. Anyhow, I made a stand with my management the last 3 weeks and insisted that I code and Read More...
  • New and Notable 130

    Lots of great stuff this time. CLR/Interop There has always been a ton of confusion about CLR assembly version numbers since 1999 and a lot of people don't understand all the different version numbers. Luckily, Richard is starting a series on them with the first being the Native File Version which of course has nothing to do with CLR Versioning. Back to Interop - Mike Stall wisely says Marshal Opaque Structs as IntPtr Instead of Byte[] Speaking of Mike, he's got a very good Table of Cool .NET Tools if you work at this level WPF/Avalon Mike Swanson lists More WPF Conversion Tools, Including VB6 to XAML Karsten s ays, "If you are a WPF developer, you must read Optimizing WPF Application Performance " Anthony clarifies the difference between Microsoft Visual Studio codename "Orcas" CTPs and "Visual Studio 2005 extensions for .NET 3.0 (WCF & WPF), November 2006 CTP". WCF/SOA/Workflow Pablo has three Recommendations to Design Message Contracts . I agree with all three. Number 1 about not including business behavior in the message but using simple DTOs across has been the hardest for us to achieve. Nicholas Allan (again!) on Proxy Bypassing Behavior The Sharepoint team blog has been having a series of posts on Workflow in Sharepoint 2007 Choosing the Right Microsoft Integration Technology [via Tomas ] Windows Vista/Office 2007 Vista, Office 2007 and Exchange Server 2007 has their Business Launch today. Here is the official site . Technorati Tags: Software Development , Avalon , Windows Presentation Foundation , Software Architecture , Agile , Agile Development , Windows Communication Foundation , WCF , SOA , Microsoft Share this post: Email it! | bookmark it! | digg it! | reddit! | kick it! Read More...

Copyright © 2006 Microsoft Corporation. All Rights Reserved. | Terms of Use | Privacy Statement | Contact Us