|
|
Visual Studio, .NET, BizTalk Server, SQL Server and more...
-
I neglected to post about this at the time, but back in June 2008 I had an article published in .NET Developer’s Journal titled “A Walk Through the Process: Creating Services with Contract-First Design Using BizTalk Server 2006 R2 and Windows Communication Foundation.” The article is available on the .NET Developer’s Journal website and the sample code is attached to this post.

BizTalk makes a great platform for true contract-first service development because it is designed around messaging. One of the first things one usually does on a BizTalk project is to load or create XML schemas. With BizTalk Server 2006 R2’s support for Windows Communication Foundation, it’s a natural platform upon which to build services using contract-first design.
The article assumes that you have worked with BizTalk before, but otherwise it is a step-by-step walkthrough of the process to create schemas, create sample orchestrations to carry out the work behind the service interfaces and to publish the schemas as WCF services.
|
-
While tracking down an issue the other day, I stumbled across 25,000+ empty subdirectories inside a single folder: \Documents and Settings\<username>\Local Settings\Application Data\Microsoft\WebsiteCache (or on Vista, \Users\<username>\AppData\Local\Microsoft\WebsiteCache). NTFS can technically handle this, but file system performance can slow down for a directory containing such a large number of subdirectories. How did this happen? I’ve been using the same XP workstation for BizTalk and some .NET development for one year, using Visual Studio 2005 SP1, BizTalk Server 2006 R2 and the Visual SourceSafe 2005 provider. My BizTalk solutions include a C# web application project alongside numerous BizTalk projects. After deleting everything in the WebsiteCache folder, I discovered that my BizTalk solutions opened noticeably faster. Upon opening and closing the solution a few times, it turns out that Visual Studio was creating one empty subdirectory in WebsiteCache for most or all of my project files and items in Solution Items. Each time I opened a solution around 15 new subdirectories were created, but never deleted. Over the course of a year, I accumulated 25,000+. Another developer found 33,000+ subdirectories in his WebsiteCache folder! Opening the solutions was taking longer and longer as time went on. By clearing out the WebsiteCache folder, the solutions (with VSS integration, and which contain around 12-15 projects) now open 10-15 seconds faster. Other people have reported this issue to Microsoft Connect, but the issue was closed as “not reproducible.”
|
-
One of the things I've been doing over the last six months is enhancing two well-known BizTalk Server tools: Scott Colestock's Deployment Framework for BizTalk and Darren Jefford's GenerateTypedBAMAPI tool. I also created a CodePlex project of my own, Environment Settings Manager, which was incorporated into the Deployment Framework and is very useful in its own right. I never took the time to stop and mention all of the changes and new features, so here's a summary: Deployment Framework for BizTalk: - Contributed the Environment Settings Manager project, which includes an environment settings spreadsheet that looks like the original one from Loren Halvorson, but does not use any macros and supports saving as either binary XLS or XML (SpreadsheetML). The companion command-line utility can take in either type of file and export the environment-specific XML settings files that the Deployment Framework uses to create environment-specific configuration files on the fly.
- Added initial support for side-by-side deployment (multiple BizTalk app versions installed at once): added a "project" version property, added the version to the installer title and default install folder path, added version number to the BizTalk application name and SSO affiliate app name
- Added initial support for deployment of BAM activity definitions
- Updated WiX (for MSI generation) to 3.0.x, in the process drastically simplifying GenericBizTalkMSI.wxs and improving the MSI user interface
- Modified the installer to completely clean up on uninstall, removing all dynamically generated files
- Modified SetEnvUI.exe (the wizard) to open the file browse dialog in the current directory vs. C:\ and replaced a P/Invoke call with a Framework call
- Modified the installer to install "for all users" vs. only for the current user
- Simplified and improved the clarity of the checkbox captions in the server deploy/undeploy wizard
- Added an attribute to the UpdateSSOConfigItem Nant task for the BizTalk Application name
- Made minor documentation updates and replaced the HTML version of the help with a PDF version
- Updated to NAnt 0.85 release from RC1
- Included the Visual Studio Tools menu install scripts in the Sample ZIP file
- Cleaned up the project a bit, removing unused files, etc.
GenerateTypedBamAPI: - Checked in the source code for the first time
- Added support for a relative path to the Excel workbook vs. explicit path only
- Added the partial keyword to the generated API class
- Added a method to the activity classes to enable continuation and return a continuation ID
- Added a command-line parameter to specify the .NET namespace of the generated code
- Changed "ESApi" to EsApi to conform to .NET capitalization conventions
- Added "Activity" to the end of the activity class names
- Explicitly passed "en-us" culture info to the Excel methods to avoid a globalization bug reported by users
- Made other minor code improvements, removed XSLT resource class in favor of Visual Studio's built-in resource support
While I was at it, I added to the GenerateTypedBamApi project a completely new command-line utility program called ExportBamDefinitionXml that can extract the BAM definition XML from an XLS file and write it out to a file. This utility can be used to automatically keep a BAM XML in sync with a BAM XLS file during local or automated builds. The code reuses some of Darren's code that was already present in GenerateTypedBamApi. The majority of the changes listed above are not yet built into official "releases" on CodePlex, but hopefully that will happen soon -- I just need to coordinate with the project owners. In the meantime, hop over to the Source Code tabs and grab the latest from there. Please feel free to enter new Issues and Discussions topics in the projects with your ideas and bug reports. Enjoy!
|
-
I finally had (made!) time to wrap up two certifications that I have wanted to complete for a long time. One is the MCPD: Enterprise Application Developer, and I am also a Microsoft Certified Trainer (MCT) for Enterprise Application Development, which allows me to teach all Official Microsoft .NET Development and BizTalk Server courses. I recently stumbled across an interesting Microsoft certifications page that includes the number of people worldwide who have each of the various certifications. It's pretty interesting. At last update, there are just over 13,000 MCT's worldwide, and only about 4,000 MCPD: Enterprise Application Developers worldwide! I was really surprised at how low the numbers are for the three flavors of MCPD after two years of availability. This gives me a great opportunity to put some graphics on this blog for a change! :-)
|
-
In my current project I'm using Enterprise Library 3.1's Caching block to cache data retrieved from web services. The caching code is implemented in a regular C# class library, and I have NUnit 2.4 tests to test it. In order to configure Enterprise Library at runtime I'm using Enterprise Library's FileConfigurationSource to point to a separate configuration file. Works great. However, I discovered while running my unit tests that when I ran a test and then tried to close NUnit GUI or re-run a test, there was a 5-10 second delay before the IDE closed. An AppDomainUnloadException was being thrown at the end of the delay. When I commented out the code that created the Enterprise Library CacheManager object the delay disappeared, so clearly Enterprise Library was doing something to block the AppDomain from unloading. After some digging I found the issue. FileConfigurationSource creates a worker thread that monitors the associated configuration file for changes. The factory objects, in this case CacheManagerFactory, hold a reference to the FileConfigurationSource object. There is no way to explicitly dispose or clean up the FileConfigurationSource object itself. NUnit loads the assembly to be tested into a new AppDomain, and when it shuts down or runs another test, it tries to unload the test AppDomain. What ends up happening is that NUnit asks the AppDomain to unload, but the FileConfigurationSource's file monitoring thread does not shut down. As a result, the AppDomain cannot be unloaded and we see the delay and the AppDomainUnloadException. Needless to say, this is REALLY annoying. One partial solution that I found is the Enterprise Library 3.0+ method FileConfigurationSource.ResetImplementation(). If you create a FileConfigurationSource object and then immediately call the static FileConfigurationSource.ResetImplementation() method with the same file path, but pass false to the 'refreshing' parameter, the configuration file will not be monitored for changes. This will have the effect of shutting down the monitoring thread and allowing the AppDomain to unload... but you lose auto-refresh of configuration. I still haven't found a real solution to this. The 'patterns & practices' guys need to make FileConfigurationSource implement IDisposable or something. In the meantime, I'm forcefully killing NUnit all the time or waiting out the delay, both of which are really a pain.
|
-
BizTalk Server 2006 R2 makes it easy to expose WCF services from BizTalk's messaging or orchestration engines via MSMQ, TCP or HTTP (or custom WCF bindings). For SOAP web services, similar to the old Web Services Publishing Wizard, the WCF Service Publishing Wizard can be used to expose a schema or orchestration as a WCF Web service hosted in IIS. The WCF service's .svc file, written by the wizard and used by the WCF hosting support in IIS, always points to a common BizTalk WCF assembly (depending on choice of basic or WS-* binding) versus one specific to your BizTalk application. Since the .svc file for the BizTalk WCF web service is "generic," BizTalk needs a way to link the WCF Web service, hosted in IIS, to a port and receive location in the BizTalk messaging engine (in a different process). This mapping is based on the service's relative URL, the part after the domain name (like '/MyBTSWCFWebService/MyBTSWCFWebService.svc'). If there is a mismatch in the virtual directory name or SVC file name in IIS vs. the relative URL string entered in the receive location in BizTalk, the two will not make the connection, and you will receive an error when you attempt to connect to the web service. If you try to bring up the service in Internet Explorer, you'll see an ASP.NET error similar to "Receive location for address "/MyBTSWCFWebService/MyBTSWCFWebService.svc" not found. (The BizTalk receive location may be disabled.)". The very important thing to note is that the URL matching is case-sensitive! Not knowing this may lead to a scenario that can consume most of a day in frustration (trust me on this one). Being unaware that the virtual directory and SVC filename are case-sensitive in BizTalk, let's say that you create the virtual directory on a new BizTalk workstation with a different case than what is configured in your common port bindings XML file (assuming that you maintain one). After deploying the BizTalk application and attempting to view the service description through Internet Explorer, you find that you receive an error stating that the receive location does not exist or is disabled. Now, if you somehow realize that you need to correct the case, you go back and delete the virtual directory, recreate it with the correct case, and try to view the service again. Unfortunately, you see the same error again! Careful inspection will reveal that throughout the error page text, some occurrences of the virtual directory name are in the correct case, and others show up in the incorrect case of your original virtual directory name. I can tell you that no amount of restarting IIS, redeploying the BizTalk application, re-creating the virtual directory, rebooting, or even un-configuring and re-configuring BizTalk will get you past this error! It is really nasty. As a last hope, we started a mass search of the registry and a complete text search of the entire hard disk -- and that finally resulted in the answer: the ASP.NET Temporary Files cache (<windir>\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files). Through all of the re-creating, restarting and reinstalling, the same cached files were still being used every time! Blowing away everything in the ASP.NET cache folder solved the problem. My co-worker James ran the hard disk text search and discovered this when he came back the next morning and checked out the search results. [In case you're curious, the specific location of the bad vdir name in the cache is Temporary ASP.NET Files\<vdirname>\<random alphanum>\<random alphanum>\<svcfilename>.svc.<random alphanum>.compiled.] Hopefully this will save some of you many, many hours of frustration!
|
-
Reader Ravindranath posed several questions today in a comment, and I think that they deserve a post of their own. Here they are again: - As a part of migrating from .Net 1.x to .Net 3.x, is it advisable to re-architect for the newer .Net 3.x features (WWF, WCF, WPF, etc)?
- When is it a MUST to re-architect and when is it optional?
- Are there any approach papers towards this?
There are two primary areas of benefit for those considering an upgrade from .NET 1.0/1.1 on Visual Studio 2002/2003 to .NET 2.0, 3.0 or 3.5: benefits resulting from IDE enhancements, and benefits resulting from .NET Framework enhancements. First, let's talk about IDE enhancements. Today, your IDE of choice should be Visual Studio 2008, whether you are using .NET 2.0, 3.0, 3.5 or are considering an upgrade from .NET 1.0/1.1. VS2008 is the first Visual Studio IDE for .NET that can target multiple versions of the .NET Framework, so if you are using .NET 2.0 today, you have nothing to lose and everything to gain by moving from VS2005 to VS2008. Just a few of the benefits of Visual Studio 2008 include: - Completely new CSS-oriented ASP.NET designer, shared with Expression Web (formerly FrontPage)
- Robust IntelliSense for JavaScript
- Improved code analysis (FxCop) tools
- Improved performance analysis tools
- Team Explorer 2008 client for Team Foundation Server 2005/2008, with an improved Source Control Explorer
Since Visual Studio 2008 is still a new release, there are some Visual Studio IDE extensions that haven't been upgraded yet. Depending on how important those are to you, it's possible that you could be forced to wait for updates. Two notable examples are BizTalk Server 2006 R2, which requires VS2005 and has no announced timetable for a VS2008 update, and Microsoft's Enterprise Library, which includes a configuration editor plug-in that is not VS2008-ready. Enterprise Library has an easy workaround since you can either use the standalone editor or hop over to VS2005 for configuration tweaks, but BizTalk'ers are out of luck. Now to move on to the main focus of Ravindranath's questions: upgrade benefits resulting from .NET Framework enhancements. The .NET Frameworks 1.0, 1.1 and 2.0 were completely isolated from each other, but that changed with .NET 3.0 and 3.5. The .NET 3.0 and 3.5 Frameworks can be thought of as layers on top of each other. In fact, as I've written about previously, .NET Framework 3.5 requires both .NET 2.0 SP1 and .NET 3.0 SP1. ASP.NET has, in fact, remained at version 2.0. Projects upgrading from .NET 1.0/1.1 to 2.0/3.0/3.5 will gain their major benefits not from features in 3.0 or 3.5, but from the CLR enhancements introduced back in Framework 2.0. In most cases you will find immediate performance and memory usage benefits with a straight conversion to 2.0, making no code changes except in the rare cases where you might have used a method or class that had a breaking change in 2.0. My answer to question #1 is generally No, and my answer to question #2 is that redesign is never required. Now, of course, I have to qualify that with a couple of caveats, and put some logic behind my answers. First, it really depends what kind of application is involved and what is important to the business behind it. My primary example here is Windows Presentation Foundation (WPF). If your application is a consumer-focused application where graphics and fancy look-and-feel are very important, then yes, it makes sense to take a very hard look at moving to WPF. You will never reproduce what WPF can do in Windows Forms -- although even that requires the caveat that WPF controls can be hosted inside a Windows Forms application! If you really need the full power of WPF and your app is currently Windows Forms-based, you're really looking at a rewrite, not an upgrade. WPF carries with it a significant learning curve, immature tools and third-party libraries and a major time investment. I do not discourage its use, but you do need to have good reasons and a real need for it, and know what you are getting into. In another year or two, there will be no reason not to build all smart client apps with WPF, but we're not there yet. Second, there is often no good reason to rewrite your ASMX-based Web services with Windows Communication Foundation (WCF). ASMX is still supported, and it will remain in the Framework into the future. There are two main reasons to rewrite existing ASMX services with WCF: - You have an explicit need for the WS-* features introduced in WCF and cannot get by with the WS-* subset in the Web Services Enhancements add-ons.
- You need the ultimate in performance from your service.
I recommend without qualification that all NEW services (which can be anything from an MSMQ listener to a web service to a self-hosted TCP endpoint) and service clients be written with WCF. Once again, you will experience a fairly significant learning curve, but WCF is the communication framework of the future, so you'll have to learn it eventually. Of the major new subsystems in .NET 3.0/3.5, WCF is the one that most developers will use most often, and it is the first one to learn. That leaves Windows Workflow Foundation (WF) and CardSpace, and these are the least common. As with most security-related programming tools, CardSpace will never excite much developer interest. I think it will remain a niche tool. On the other hand, WF has a lot of potential, but it also takes the most time for developers and architects alike to fully comprehend how to put it to use. One sample that is out demonstrates the automation of a Windows Forms form using nothing but the WF rules engine to drive validation and enabling/disabling controls as values and control focus changes. Normally this would involve dozens of event handlers and many lines of code in even a relatively simple form, but this sample has almost no code behind the form. That's a pretty slick example of just the WF rules engine, which doesn't even address the actual workflow engine. So, to recap, in most upgrade scenarios from 1.1 to 3.0/3.5, I think you will be best served by a direct upgrade, not a rewrite. Then evaluate, in order, where you might be able to put to use WCF, WF, WPF and CardSpace, but don't rush to use any of them just because they're there! You will gain huge benefits just from the improvements in the 2.0 CLR and Framework and in the newer Visual Studio IDEs, so enjoy those improvements without too much worry about the 3.0 alphabet soup. You'll find a use for them when the time is right. Finally, I am not aware of any specific papers including guidelines for when to re-design or not in these areas. Generally, I would look to MSDN and primarily the patterns & practices team for this type of analysis, but I haven't seen anything yet. If any readers know of related papers, please feel free to post links in the comments.
|
-
I've recently been working with an existing WCF service that does not properly export its metadata. [Note to WCF service developers: when testing your service, you need to explicitly test metadata export along with the actual service functionality. There are many ways to break it.] The Service Model Metadata Tool (a.k.a svcutil.exe) can connect to the service for metadata download (svcutil.exe /t:metadata <url>), but the result is a brief WSDL that contains no type information (no messages, no bindings, no schema at all). The company that built the service uses the Web Services Contract First (WSCF) tool from Thinktecture to generate serializable .NET proxy classes and WSDL files from XML schemas. The service contract is defined by the XSD's. [Note: WSCF does not directly support WCF.] Since we can't download metadata from the service, the developers gave us a copy of their XSD's and WSDL file (the latter generated by WSCF). Should be no problem to consume them. In my case the service client is BizTalk Server 2006 R2, using its built-in support for WCF. BizTalk can generate a proxy (message and port types and schemas) for a service using the WCF Service Consuming Wizard. In a great example of unfriendly UI design, to reach this tool you must first have a BizTalk project open. Right-click the project and select "Add" then "Add Generated Items...", then choose the "Consume WCF Service" option. The wizard can import directly from a running service, or it can import directly from a WSDL and associated XSD's. The second option was perfect for our situation. Almost. When I ran through the wizard, the wizard ended with the error "Error consuming WCF service metadata. Object reference not set to an instance of an object." Not so good. One solution to this is quite simple, fortunately. There may be other variations in the WSDL or XSD's that can cause the same error, but check this out first. In your WSDL file, make sure that the <xsd:schema> element has a targetNamespace attribute. It doesn't matter what attribute value you use, just make sure it looks like <xsd:schema targetNamespace="anything">. The WSCF tool did not generate this attribute. Once it was in place, the wizard quickly generated the proper items in the project. Another note: the WSCF-generated WSDL was also missing a <service> element. Without a service defined, BizTalk will generate empty binding files for the service. Be sure to include something like this in your WSDL: <service name="service1"> <port name="BasicHttpBinding_IService1" binding="tns:BindingName"> <soap:address location="http://localhost:8080/service1" /> </port> </service> Make sure that the name in the binding attribute corresponds to the name attribute of your <binding> (or <wsdl:binding>) element, otherwise you'll still end up with empty binding files. When it's working (most of the time), BizTalk 2006 R2 makes it really easy to both consume and publish WCF services. I'm glad that we are finally starting to move beyond the WSE and ASMX days!
|
-
As you may or may not know, Windows Presentation Foundation (WPF) does not ship with a data grid control. [I'll pause while I wait for the cursing to die down...] First, I need to make an important distinction: there is a Grid control in WPF, but it is a layout control, not a data grid like Windows Forms' DataGridView/DataGrid. The good news is that the usual array of third-party component vendors has jumped in to fill the gap. The bad news is that most are still at various stages of beta or 1.0 releases. Update: For the sake of completeness, I should mention that Windows Forms controls can be hosted in WPF, and that's another option to consider. Here, I'm talking about "pure" WPF controls. The WPF data grid controls that I have discovered include: For the last three months I've been working on a .NET 3.5 WPF-based business application (a rare animal these days, since most WPF samples and real-world apps are highly consumer-oriented). I've been using Visual Studio 2008 Beta2, and jumped over to the RTM the day it was available. The main purpose of this application is data editing, so I needed a solid data grid control. I started by checking out the options listed above. My first approach was Infragistics xamDataGrid. They offer a free Express edition, so I started with that (and later purchased the product to obtain support). It went in pretty easily and visually looked nice. My data source is a collection of objects that implements IBindingList. If your collection class does not implement IBindingList, you will not be able to add new rows to the grid (this is also true with Xceed). I quickly discovered that xamDataGrid did not provide the out-of-box behaviors that one would expect when adding and canceling a new row. For instance, if you start a new row, enter some values, then hit Escape twice, my expectation is that the new row is canceled and removed (see Access, SQL Management Studio, etc.). I also had trouble getting the grid to bind to a column using a ComboBox instead of a string value. I had a collection of objects that represented all possible values of a field (CountriesCollection, for example), and was binding the ComboBox to a property of that same object type (binding CurrentCountry property, of type Country, for example). The Infragistics support forum for xamDataGrid consisted of many people posting questions and rarely receiving answers. There were many threads ending with "Hello, is anyone from Infragistics listening?" Thinking that premier support would be great, we purchased the product. Quite frankly, I was disappointed with the "premier" support. I got responses that did not address my specific scenario (as explicitly described in the support request), and those that said "it'll be fixed in a future hotfix." Suffice it to say, I dumped xamDataGrid. I highly recommend Xceed DataGrid for WPF. This is a solid product with good support. It has been out in real release, not beta, for a long time already, and it just works. It took a half day or so to drop it in and hook it up, figure out a few subtleties, and it was ready to go. I still had some questions, so we purchased this product too, and their support staff turned the questions around quickly with definitive answers. Xceed also offers a free, highly-capable version of DataGrid for WPF, so check it out. One thing to note if you are used to Windows Forms data grids: Xceed DataGrid for WPF does not support the IDataErrorInfo interface for bound object validation and automatic error display. They have that in their suggestions list but with no timeline. Save yourself some time and hassle and go straight to Xceed DataGrid for WPF. NOTE: I have no connection to Xceed whatsoever; I just hope this saves you some time since I learned the hard way!
|
-
Digineer continues to be a leading Microsoft partner for BizTalk Server in the Twin Cities area. As of this writing, we are proud to have six consultants who have passed exam 70-235, and several like myself who also completed the 2004 certification exam. We are active in the Twin Cities BizTalk Server User Group and regularly provide content for the BizTalk Hotrod e-mag. Since I have been so behind on my blog this year, I'm writing this in November but I passed the 70-235 exam in June (!). Passing is 700 with 50 questions total. I was pleased to walk away with an 842, despite the diabolical BAM questions they always throw in. I think the exam was quite good as certification exams go. It covered many aspects of the product and in order to pass you will have to spend hands-on time with the product. There was quite a bit of BAM and BRE, some poorly written questions, but pretty much as expected overall. There was a question on BRE FactRetrievers that I wasn't expecting, but otherwise, no code-focused questions. The question types are a lot of "choose X of Y", some straight choose-one multiple choice and some "choose the necessary steps from a list and put them in the right order." If you're a current or aspiring BizTalk developer and want to be part of a group who really knows and loves BizTalk, and you're in the Twin Cities area, please contact me. We are always looking for people who have a passion for BizTalk!
|
-
A while back Microsoft copied some of the biggest and most in-demand software downloads for MSDN Subscribers to the Akamai content distribution network. If you haven't heard of Akamai, it operates a worldwide network of content distribution servers with the goal of offloading download activity from web servers and moving the content as close to your physical location as possible. It's all about getting data to you faster.
There are now two ways to get some popular software from MSDN Subscriber Downloads. The first, and familiar, way is to log into the Subscriber Downloads website as usual, and use the Microsoft Download Manager ActiveX control to download the software. The newer, Akamai way is (I believe) only available from one web page here. You will still need to log in as usual.
In order to use the Akamai downloads:
- Allow pop-ups from http://msdn2.microsoft.com.
- Visit the downloads link, log in, and when the page comes up, look down to the "Top Subscriber Downloads" area. These are the Akamai download links.
- Determine if the software you want is in the list. If not, you'll have to go through the normal Subscriber Downloads site.
- If the software you want, like VS 2008, is in the list, click the link to begin the download. A pop-up will appear, and you will have to allow the Akamai Download Manager ActiveX control to install. You may need to re-click the link after the control installs.
- The Download Manager will ask for a folder to store the file in. You'll have to keep its window open while the download takes place.
- If you are on Vista with default configuration, there is one little catch: the Download Manager will not be allowed to download to most directories on your hard disk, and it will be forced into a Vista virtualized folder system. That's where Vista points an application to a folder in a temporary location (not the folder the application thinks it is pointing to) for security with Internet applications. Once you have downloaded a multi-GB file and it is not in the folder that you selected at the start of the download, you are probably not going to be a happy camper. It's there, just not where you expect. Look for a folder like this: C:\Users\tabraham\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\tabraham\Documents. In this example, I pointed the Download Manager to C:\Users\tabraham\Documents and that is where it ended up.
I hope that helps. Some of the downloads are a lot faster from Akamai -- if they happen to be popular enough to be on the Top Subscriber Downloads list. Visual Studio 2008 RTM is up there as I write this, and my download just finished. Time to install!
|
-
The next major release of Visual Studio 2008 and the .NET Framework 3.5 have quietly been released to manufacturing over the weekend, along with .NET Framework 2.0 SP1 and .NET 3.0 SP1. This is an important release of Visual Studio because it fully integrates the tooling for the technologies released in .NET 3.0 (Windows Communication Foundation, Windows Presentation Foundation, Windows Workflow Foundation and CardSpace) and, for the first time, can target multiple versions of the .NET Framework. Our team has been building experience in the .NET 3.0 technologies for most of this year and playing with the betas, and we're looking forward to working with the improved tooling in the RTM release. Download .NET Framework 3.5 here. The .NET 3.5 installer will install the 2.0/3.0 Framework and 2.0 SP1 and 3.0 SP1 automatically. The service packs are also available separately for 2.0 and 3.0. As for Visual Studio 2008, I think the MSDN subscriber downloads site is having issues already, probably due to high demand. I just finished installing .NET Framework 3.5 RTM on my laptop running Vista Enterprise. The install took a long time, about 30 minutes, but succeeded. Along with 2.0 SP1 and 3.0 SP1, it also installed two Vista hotfixes, KB929300 and KB110806. This release, like 3.0, is more of an additive release that requires and builds upon 2.0 and 3.0, unlike the 1.1 to 2.0 transition. There is also a big new training kit (120 MB) that includes presentations, demos and labs. You can get that here. There are also 3.5 whitepapers by David Chappell and a 3.0 common namespaces and types poster. I've been working with 3.0 and the 2008 betas for about 10 months now, so I've been a bit negligent with my blogging! It has just ended up to be another really busy year. I hope to get some new posts out about 3.0/3.5 soon. From Microsoft: .NET Framework 3.5 builds incrementally on the new features added in .NET Framework 3.0. For example, feature sets in Windows Workflow Foundation (WF), Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF) and Windows CardSpace. In addition, .NET Framework 3.5 contains a number of new features in several technology areas which have been added as new assemblies to avoid breaking changes. They include the following: - Deep integration of Language Integrated Query (LINQ) and data awareness. This new feature will let you write code written in LINQ-enabled languages to filter, enumerate, and create projections of several types of SQL data, collections, XML, and DataSets by using the same syntax.
- ASP.NET AJAX lets you create more efficient, more interactive, and highly-personalized Web experiences that work across all the most popular browsers.
- New Web protocol support for building WCF services including AJAX, JSON, REST, POX, RSS, ATOM, and several new WS-* standards.
- Full tooling support in Visual Studio 2008 for WF, WCF, and WPF, including the new workflow-enabled services technology.
- New classes in .NET Framework 3.5 base class library (BCL) that address many common customer requests.
|
-
This has turned out to be a very busy year, thanks in part to Microsoft's ever-accelerating stream of product releases. Even five years ago I never thought that I'd hope Microsoft would slow down! One of those exciting new products is Microsoft BizTalk Server 2006 R2, which features Microsoft's new RFID platform, extensive support for EDI and all-new native WCF adapters (my favorite!). I had the pleasure of presenting at the Minneapolis/St. Paul-area BizTalk Server 2006 R2 Launch event on October 9th. My session was entitled "BizTalk Server 2006 R2: A Core Component of a Service-Oriented Architecture" and was very well-attended. Thank you to everyone who listened in! We even had Jon Flanders from Pluralsight and Michael Woods from the BizTalk product group on hand, and Michael introduced my sessions with an overview of Microsoft's vision of SOA. Tonight, November 15th, I'm presenting a session with my co-worker Randall entitled "Message Queuing with BizTalk 2006 R2: MSMQ, IBM WebSphere MQ and Ordered Delivery" for the Twin Cities BizTalk User Group. I'm going to talk about queuing and the pros and cons, go through some MQ configuration issues and demo the MSMQ and WebSphere MQ adapters for BizTalk. Randall is going to show some code as part of a solution for ordered delivery using MSMQ. We hope to see you there!
|
-
Most developers tend to think in the context of the language they are currently writing. If you're writing C#, you are accustomed to having the core .NET Framework class library at your disposal. If you're writing VB.NET, you're used to having many more classes above and beyond the core class library, and in J# (assuming anyone actually uses J#) you have yet another pool of classes to choose from. This language-specific focus can lead to an unfortunate bit of tunnel vision. To make a stunningly obvious point (once you think about it for a minute): your C# application is free to use any class available in the VB.NET or J# class libraries (or any others). Your VB.NET application is free to use any class available in the J# class library, and so on. Whatever language you are using, you can, and should, take advantage of all of the class libraries available to you! Less work and less custom coding is always a great thing. In the context of a C# application, this means adding a reference to Microsoft.VisualBasic.dll. (What? Is he nuts?!?) Sure, it might seem odd at first, but all high-level language code for .NET is reduced to one intermediate language in a managed code assembly -- IL. It makes no difference if it originated in COBOL.NET, C#, VB.NET, J#, etc., and there is absolutely nothing wrong with having "using Microsoft.VisualBasic" in your C# code. The core .NET Framework already includes the extra VB class libraries, but to get the J# class libraries you need to have the J# Runtime installed. There is a lot of great code just waiting to be used. For example: need to work with ZIP files (unlike System.Compression)? Check out the java.util.zip namespace in the J# runtime. Yeah, that's .NET managed code, despite the "java" in the namespace. Remember that the J# runtime and J# itself was designed to be compatible with Java, so the runtime attempts to recreate as much of the (older) Java class libraries as possible. Another example: the Microsoft.VisualBasic.Financial class. How cool is this? Asset depreciation calculation, present value of an annuity and more. If you're coding in C#, you may well have gone off and coded all of this yourself, or looked to open source for a solution -- all while it was right under your nose. I found an old article from MSDN magazine that demonstrates writing a ZIP utility in C# using the J# runtime, which is a great example for this topic. Some of you will be saying "Duh!" by this time, but the reactions from years of saying this to developers has told me that it is not immediately obvious to everyone. Hopefully this will save you some time!
|
-
I happened to be building an ASP.NET 2.0 website earlier this year when the ASP.NET 2.0 AJAX Extensions RTM'd, so I decided to try it out. Someone recently asked me my impressions of the Extensions and Control Toolkit and how best to get started, so I thought I'd pass on my comments.
Thinking of existing ASP.NET developers picking up AJAX for the first time with this framework, it is an extremely well designed and natural development model. It integrates almost seamlessly into the existing development environment and "<asp:xyz>" tag model.
The AJAX Extensions support static page class methods and web services, mainly using JSON serialization, to access and even data bind controls. Some of the controls use this capability to populate data, such as the CascadingDropDown. If you want to use that capability outside of the provided controls, you get to start writing some JavaScript against the client-side API (Microsoft created a new object model written in JavaScript, all client-side, namespaces and all). However, all of the source code to all of the controls, and the entire Toolkit itself, is available for download, so you can dig as deep as you want for usage or implementation examples.
The barrier to entry for JavaScript and all of the cross-brower drama that comes with it can be significantly lowered by learning and programming to the new client-side API, so that is something worth learning. Developers should make an effort to truly understand what is going on when they use AJAX on a page. There is a lot of code happening behind the scenes to produce the end user effect of partial updates or fancy animated controls.
There are several good tutorials to get you off the ground. The AJAX Framework is truly a framework -- when you install it you don't have any fancy AJAX controls to drop on your pages. Instead, you've got the basis for building your own, and for writing cross-browser JavaScript code on top of the client-side API. That may be a surprise to someone installing it for the first time. Instead, all the fancy controls are housed in a Microsoft-sponsored open-source project on CodePlex. Naturally, they are documented about as well as most open-source projects. However, they do come with a sample website that you can play with.
One thing that should be high on everyone's to-do list as a web developer is mastering CSS. If you are not very strong with CSS, it is going to become tougher to use the new tools, including AJAX and WPF/E. For many of the fancy controls noted above, you need to create a number of CSS styles just to get them to work. I recommend one site for CSS that may open your eyes to the possibilities. Check out all the layouts you can do with no nested tables involved, and cross-browser too. I believe that the AJAX toolkit documentation is lacking, in some areas significantly. You will probably find yourself with questions that are not answered at all, or poorly. However, that has not proven to be a major issue. For the most part things work as expected, but there are certainly subtleties to learn.
I have had some issues with the collapsible controls not sizing correctly in a stacked configuration, but that is in an absolute positioning-based CSS website that may have another CSS issue that I'm missing. On the same site, we have an issue with the stacking and with calendar controls not appearing in IE6 only, but again, that could be related to the other CSS.
Another downside seems to be page speed during development. If debugging is enabled you get a non-compressed debug version of the large JavaScript client-side code, and starting a page in the debugger may take an extra five seconds before it is usable vs. no AJAX. I believe one of the recent Control Toolkit updates is beginning to address this issue.
A not-to-miss blog for a wide range of ASP.NET topics, not just AJAX, is Scott Guthrie's. Here are some more ASP.NET AJAX labs. And training videos. The good news is that you can start using the Extensions for very small bits of functionality on your site and expand from there. For instance, I put an existing checkbox that simply turns a flag on and off in a database inside an UpdatePanel to avoid a complete postback. I'm sure you can think of areas like this on your websites where a simple operation could be easily optimized with AJAX Extensions for a much bigger benefit in user experience.
|
|
|
|