June 2004 - Posts

Generate WSS Sitetree structures? MS Expert says no at TechEd..
30 June 04 05:53 PM | madsn | 3 comment(s)

Well, actually not NO but:

I was just over at the "Ask the Experts" stand talking to the Sharepoint guys from Microsoft Netherlands. I was describing a scenario where I was planning to generate a WSS site tree structures based on MS CRM Account, Opportunity and Contract entities.

My reasoning for creating WSS site trees under a top-level website was largely based on the following:

  • Global authentication and authorization can be set for the entire tree under the top-level website. Administration of this can be desentralized.
  • The sitetree structure can align with existing categories as the customer uses today.
  • The top-level website can be placed in the DMZ for this certain type of site. For example post-sales collaboration (Contracts) would be a candidate for extranets, as pre-sales (Opportunities) seldom would.
  • The site structure should be generated so that Sharepoint performace limitations does not kick in. Rumours has it that no site should have more than ~2k subsites.
  • The generated site structure could also scale by moving it to another top-level website.
  • The sites generated in the sitestructure would then be indexed in a site directory in the Sharepoint Portal with suitable metadata.

The experts standpoint was that structuring data in folderlike hierarchies has proven not to work. His main concern was to locate information. The recommendation was basically to follow the SPS Site Directory area approach: To create a new top-level website for every site in the portal.

He saw no reason for logically grouping the sitestructures under top-level websites because they would all be organized in the site directory. This is the way Microsoft does it on their portal with more than ~30k sites. According to the MS rep: all as top-level websites.

I am still letting this sink in, and as a programmer the unstructured fashion of this principle feels icky. I'd like to get more people involved discussing sharepoint architecture in general, and site generation (in integration scenarios) in particular. Sharepoint is no huge focus here this year so are anyone up for a Session?

 

A crowded unit testing BoF
30 June 04 12:02 PM | madsn | 2 comment(s)

This mornings BoF lead by James Newkirk was truly crowded and goes to prove that .NET developers are taking testing seriously. Considering the level of participation in the discussions there might actually have been too many participants as there were no real discussions, more statements regarding to experience summed up and commented by James Newkirk.

Topics included handling testing of legacy code, reasonable test times, mock objects, testing database code and more. Check out Benjaminm's blog for upcoming details. Moetivating developers to write tests were discussed in a TDD/test-first context. Later on in the session several delegates were talking about CruiseControl and I left feeling that Continous Integration should have been addressed more thouroughly, maybe even in a separate session.

For me, Continous Integration is the primary motivator for testing because it gives tests a purpose and visualizes the results. The challenge for automated builds in CI is usually build times. This was also dicussed in this mornings BoF. Several delegates had build times of 6 hours and more. I completely agree with James Newkirk in that build should never be more than an hour. To accomplish this the solution has to be separated into subsystems. How easy this is to implement depends on the overall solution architecture.

An interesting paralell can be made to principles applied to service orientation. I like to use the micro and macro view of the application as presented a while back by Clemens and Steve Schwartz on the Architects Tour. I you think about components as services in a micro view and define a contract for this component you'll have exactly the interface to test for which you may, or may not use test-first. This relates to Christian Weyer and Beat Schwegler chalk'n'talk last night on contract-first service development/design.

Both test-first and contract-first is based on the same principle: definition of the recuirements for a piece of software. I feel components should be treated as lightweight local services and have the same demands for quality and design as services.

Sharepoint Portal Architecture and autogenerating WSS site forests
28 June 04 12:45 PM | madsn | with no comments

I've been checking out the Sharepoint content on this years teched, and some of the hands-on labs might be somewhat interesting. My major interest regarding sharepoint these days, however, is how to design the Portal architecture. How do you efficiently design the relationship between SPS and WSS and how can automatic generation of WSS sites support structured growth of the portal.

I would have liked this subject to be a BoF session, but in the lack of such I encourage anyone with interest in this subject (or related Sharepoint stuff) do drop a comment and we could hook up during the conference.

 

Booting @ Teched - PRE001 Biztalk
28 June 04 12:22 PM | madsn | with no comments

Settled on the premises and online with just a minor hassle I'm well into the pre-conf session on BizTalk:

PRE001 Building an End-to-End Integration Infrastructure with BizTalk Server 2004

Eric Van Bever walks through BizTalk functionality talking demonstrating the various features. When he talks about functoids a slight resemblence to the professor in futurama might be noted.

As previous BizTalk presentations I've seen, this reminds me about the earlier demos of VS.NET where all the cool features are cooked together as quick as possible. I miss the architecture aspect. The demos need a more realistic scenario than "we're gonna move this message from this place, flip it a couple of times, and push it out again". They should create realistically segmented projects in the demo, and point out best practices. For example I would imagine that the inline functoid scripting tool-thingy isn't really very wise to use in a larger project.

I want to know more about the typical lifecycle of the biztalk project. I'm sure there are obvious answers to my questions but I'll pose them anyway:

  • What about testing considerations? Scott Colestock is addressing this issue, so far I've seen nothing from MSFT.
  • How will BizTalk projects align with the upcoming Team Services? How will several developers collaborate on a BizTalk project?
  • How to properly document the integration design? 
  • How about architecture? How should biztalk components be designed to avoid a complete mess when the projects grow?

The PAG team should get in the game and give us guidelines so that we'll avoid having to clean up a lot of messy BizTalk projects in a couple of years time, just as we're doing with early .NET applications today.

I realize that the main focus now is to get us (developers and wallets) excited about functionality, but my excitement will remain on a leach until I feel comfortable with the managebility, testability and build/deploy considerations related to BizTalk.

Filed under:
Visual Source Safe time and CruiseControl builds
21 June 04 08:25 PM | madsn | 3 comment(s)

Ever wondered why some developers triggers builds slightly faster than others when checkin into a CruiseControl.NET monitored Visual SourceSafe database?

Check the local time on the developers machine. VSS doesn't care to use local buildserver timestamps. Just one more quirk to add to the VSS cons list. (yes I use it, yes I want to use something else, no I don't know why I don't).

 

Microsoft CRM Blogs
17 June 04 05:26 PM | madsn | 1 comment(s)

A couple of weeks ago I took the Microsoft CRM Customization Certification, probably as the first in Norway. Internally we've been starting up a dog-fooding project and today I started working with a client that are implementing Microsoft CRM in the current project.

I wanted to read up on the development aspects and get the real deal, but found very few focused blogs on the subject. So, I am currently announcing my own CRM feed on this blog and I've also created a MSCRM blogroll. Currently there's only Michaeljon Millers blog Inside MSCRM on the list, but in return it's very informative. He has been part of the MSCRM team from the start and provides a developers unleashed, uncovered view. A directors cut if you'd like. And he also uses the word "suck" enough to make him veri credible about knowing the inside of a large piece of software:)

 I'll be sure to make my feed grow the coming months, and maybe in a couple of days when my company becomes MSCRM Partner we'll get even more background from MS making me able to deliver more insight.

Please post me a comment if you've got other valuable resources on the subject.

Filed under:
Took me 3 hours to get the agenda right..
17 June 04 12:42 AM | madsn | 2 comment(s)

Took me just about the entire evening browsing through all the sessions on the event site.

I do feel that the search "tool" for the sessions could have been better. Simply a shopping cart-ish thing would have helped, or maybe a couple of collapse buttons (per day maybe). The calendar schedule however was nice, and the event mail is a nice gesture (although I have no idea what I want to use it for). Hopefully I'll get the calendar exported to my SmartPhone. Anyways, the day to the candystore is completed. 

I wanted to cover several areas in my selection:

  • Service oriented architecture
  • Focused sessions on web services and the future standards
  • MS Server product solutions including Sharepoint / CMS / Live Communications Server
  • .NET Compact Framework and Smart Client development

Here are the votes of the norwegian jury (for those of you who "enjoy" the eurovision song contest):

Tuesday

Opening Keynote - "GET INSIDE and feel the Rhythm"

Metropolis: Envisioning the Service-Oriented Enterprise

BPR385 Live Communications Platform: Architecting, Deploying, and Building Custom Solutions

MBL-IL01 Developing Mobile Database Applications Using SQL Server CE (Instructor-led Lab) 

CTS200 Service Orientation and the Windows/.NET Developer - Don Box 

Wednesday

CTS201 Connected Systems: Web Service, XML Serialization and Networking in .NET Framework 2.0 

BOF001 Integrating unit testing practices in the software development lifecycle – James Newkirk 

MBL351 Data Access And Synchronization Strategies for the .NET Compact Framework 

PNL005 Metropolis: Implementation Advice for the Service-Oriented Enterprise 

CHT011 And You Thought You Knew about Web Services?! 

ARC-IL01 Building Scalable Architectures with FABRIQ (Instructor-led Lab) 

BPR332 InfoPath 2003 SP1: Using Managed Code to Build Solutions 

Thursday

BPR324 Building Enterprise Content Applications with CMS 2002, Office 2003 and K2.net 2003 

CTS406 Versioning of Connected .NET Applications 

CTS308 Building Proseware, Inc. – a non-trivial service-oriented system 

DEV265 Busting .NET Development Myths: Panel Discussion 

ARC311 Enterprise Information Integration and Entity Aggregation in Service-Oriented Architecture 

CTS404 Best Practices for Dealing With State at Multiple Layers Within Your .NET Applications 

Friday

DEV319 Creating Efficient, High Performance XML Web Services 

DEV304 Asynchronous Windows Forms Today and Tomorrow 

ARC230 The Nerd, the Suit and the Fortune Teller 

ARC305 Smart Client Architecture Principles 

EBZ301 Microsoft Business Solutions CRM: Using the SDK to Develop Add-On Solutions 

These sessions are currently on the bench and would be excellent substitutes:

  • ARC314 Transforming Industries through Mobilized Software Solutions 

  • BPR386 Live Communications Server 2003: A Technical Overview 

  • MBL310 Architecture And Design Patterns For The .NET Compact Framework 

  • DAT315 Intelligent BI – Integrating Data Mining into OLAP, Reporting Services and DTS in SQL Server 2005 

  • ARC303 Metropolis: Using Information in the Service-Oriented Enterprise 

  • CTS300 Prescriptive Guidance for Building with Web Services, WSE, .NET Remoting, System.EnterpriseServices, and MSMQ 

  • CHT052 All You Want to Know about InfoPath 

  • BPR391 Content Management Server 2002 Connector for SharePoint Technologies: Technical Overview and Architecture 

  • BPR338 Building Advanced Dynamic Solutions for the Information Worker Using InfoPath 2003 SP1 

  • BPR216 Leveraging Exchange 2003, SharePoint 2003, Office 2003, and Live Communications Server 2003 in a Business Environment 

  • MBL-IL02 Programming with .NET Compact Framework 2.0 (Instructor-led Lab) 

  • CTS405 Choosing a Hosting Model - Dealing with Threads, AppDomains, and Processes - Don Box 

  • DEV361 Windows Forms: Building Occasionally Connected Applications 

  • DEV381 J2EE & .NET Interoperability 

  • WIN301 Developing Corporate Identity Management Solutions using AD, ADAM and MIIS

 

Filed under:
The GAC, the WebApp, and the _layouts folder
09 June 04 03:44 PM | madsn | 1 comment(s)

Sometimes I tend to subconciously embark on a dual exploration. Much like trying to kite-surf for the first time, while reading a book of Salman Rushdie in urdu. You'll get there eventually, but the combined tasks will together take a lot more time.

Today I tried to make my Sharepoint site generator work properly while also moving my entire app to the GAC.

First problem was that the webparts no longer was marked as safe. When deploying the assemblies locally you are not required to fully qualify the typename in the DWP file with version and PublicKeyToken. When webparts are in the GAC you have to fully qualify them. So I got punished for avoiding the GAC for a while. The second problem was that the usercontrols couldn't load properly, and I got a lot of nasty CodeDom exceptions.

Because the contents in my WebParts are UserControls, and these are hosted in a separate (excluded) vdir I had to append information about where to find the required assemblies in the GAC in the webapp web.config file. This enabled the ASCX'es to locate the components in the GAC and my webparts were showing again. Also note that in order for the apps to see changes to components in the GAC you have to run IISRESET.

I had verified that the (WSS) site generator worked by switching off FormDigest validation for my top-level website and running the code. Then I wanted to be able to call my Site Generator from an aspx inside the sharepoint _layouts folder, because this folder will have the adequate permissions with validation turned on. I set the buildscript up to create a new folder in TEMPLATE\LAYOUTS called OWLAWYER (i tried Objectware.Lawyer.Sharepoint, the relevant component name, but sharepoint doesn't accept such naming; you'll get file not found). Into this folder I deployed the aspx that contains a FormDigest server control. This aspx receives sitegeneration parameters and calls the sharepoint component in the GAC. I also created a web.config file, similar to the one above, to reference the component in the GAC containing the sitegenerator.

Finally, calling the aspx in the  _layouts/owlawyer folder will only work in the context of a WSS site. Calling it from http://portalroot/_layouts/owlawyer/myfile.aspx causes a security validation error on the FormDigest token. Calling it from http://portalroot/includedpath/wsstoplevelwebsite/_layouts/owlawyer/myfile.aspx works though.

UPDATE: I'd like to elaborate a bit on why I actually wanted to put my components in the GAC after Maxims comment. I agree that in most cases, and especially in development, the GAC causes more problems than advantages. What this post show, however, is that moving to the GAC late in development might cause unexpected problems that should be considered. The main reason I had for deploying to the GAC in this case was that i didn't want to deploy my components in more than one location. With my setup it was required to deploy to A: the web application vdir bin folder B: the sharepoint bin folder (in wwwroot) C: the sharepoint _layouts bin folder. This would truly have caused dll-hell, and especially considering future versioning.

Also check out Maxims post on ipattern to understand why sharepoint behaves this way. I especially liked the sequence diagram.

 

Filed under: ,
New version of CruiseControl.NET
08 June 04 05:06 PM | madsn | with no comments

Took me a week to notice, but CruiseControl.NET 0.6.1 is now released. New features include auto-get of VSS source code (man that took me a while to realize was missing from the last release), support for ClearCase plus support for a light-weight integration with devenv (VS.NET) to avoid using NAnt for smaller projects. The devenv feature makes testing kinda hard so they also included possibilities for running NUnit directly aswell.

For those of you who just thought "WTF is CCNET?". Well, it's whidbey team services (almost), but today, and open source.

Keep up the good work!

Using an XmlPublisher in the ExceptionManagement ApplicationBlock
03 June 04 11:12 AM | madsn | with no comments

I've been using the Microsoft ExceptionManagement ApplicationBlock and I spent some time creating a nice ExceptionXmlPublisher because the one described in the docs has some flaws. Using the xml publisher removes the need to run the EventLog installer to be able to create the eventlog. Having the exceptions in Xml also works nicely in a distributed environment, and with continous integration. I will soon create an XSLT stylesheet to integrate the current runtime exceptions into my CruiseControl.NET dashboard, so developers can monitor what's going on during execution on the development testserver.

Basically my edition (in my new CodeSnippets section) appends exceptions and encapsulates the stacktrace elements in CDATA tags. I chose to add this class to the Microsoft.ApplicationBlocks.ExceptionManagement namespace and recompile the Application block. You might want to keep it in your own domain in case of version upgrades on the application block.

More Posts Next page »

This Blog

Funstuff

Goodies

MSCRM Blogs

My (old) work

Sharepoint

Useful reading

Weblogs

Syndication