Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
com
IDE
EVOLUTION
As Visual Studio 2010 takes new form,
will your user experience be enhanced?
PLUS
Project8
3/17/09
12:39 PM
Page 1
VTCVirtual Training
Center for SharePoint
SharePoint is a trademark or a registered trademark of Microsoft Corporation. DataParts is a registered trademark of Software FX, Inc. Other names are trademarks or registered trademarks of their respective owners.
Project8
3/17/09
12:40 PM
Page 2
Visit SoftwareFX.com for interactive demos, free trial versions and more
information about our latest products.
Project1
2/24/09
11:24 AM
Page 1
LEADTOOLS Document
Imaging v 16:
by LEAD Technologies
LEADTOOLS Document Imaging has every
component you need to develop powerful
image-enabled business applications including
specialized bi-tonal image display and
processing, document clean up, high-speed
scanning, advanced compression (CCITT
G3/G4, JBIG2, MRC, ABC) and more.
Multi-threaded OCR/ICR/OMR/
MICR/Barcodes (1D/2D)
Forms recognition/processing
PDF and PDF/A
Paradise #
L05 03201A01 Annotation (Image Mark-up)
C/C++, .NET, WPF - Win32/64
$
99
programmers.com/lead
2,007.
VMware
Lab Automation
Bundle
Single Server
Paradise #
D29 02101A07
91.99
FarPoint Spread
for Windows Forms
The Best Grid is a Spreadsheet. Give your users
the look, feel, and power of Microsoft Excel,
without needing Excel installed on their machines.
Join the professional developers around the
world who consistently turn to FarPoint Spread
to add powerful, extendable spreadsheet solutions to their COM, ASP.NET, .NET, BizTalk Server
and SharePoint Server applications.
Worlds #1 selling development spreadsheet
Read/Write native Microsoft Excel Files
Cross-sheet formula referencing
Paradise #
F02 01101A01 Fully extensible models
Royalty-free, run-time free
936.99
c-treeACE Professional
TX Text Control 14
by FairCom
Best
Word Processing Components
Seller!
TX Text Control is royalty-free,
robust and powerful word processing
software in reusable component form.
by Datacore
DataCore SANmelody overcomes the high
cost barrier and complexity of traditional
SAN storage. SANmelody converts standard
Intel/AMD servers, blades or virtual machines
(VMs) into fully capable storage servers that
virtualize disks and serve them over existing
networks to application servers. They are simple
to operate, take only minutes to install, and
let you cost-effectively optimize, manage and
protect data storage and disk space.
Paradise #
DCA 01101A06
CALL
programmers.com/datacore
800-445-7899
Prices subject to change. Not responsible for typographical errors.
Paradise #
F01 0131
711.
99
CALL I
programmers.com/vmware
919.
programmers.com/theimagingsource
by SAP BusinessObjects
Crystal Reports 2008 is a powerful,
dynamic, actionable reporting solution that
helps you design, explore, visualize, and
deliver reports via the web or embedded in
enterprise applications. It enables end
users to consume reports with stunning
visualizations, conduct on report business
modeling, and execute decisions instantly
from the report itself-reducing dependency
on IT and developers.
462.
programmers.com/farpoint
Paradise #
V55 72101A01
949.
SAVE 15%
off combined
MSRPs
by Pragma Systems
Paradise #
P35 043X
182.
Orion Network
Performance Monitor
by Solarwinds
Orion Network Performance Monitor is a
comprehensive fault and network performance
management platform that scales with the
rapid growth of your network and expands
with your network management needs.
It offers out-of-the-box network-centric views
that are designed to deliver the critical
information network engineers need.
Orion NPM is the easiest product of its
kind to use and maintain, meaning you
will spend more time actually managing
networks, not supporting Orion NPM.
by Virtual Iron
Virtual Iron Extended Enterprise Edition
provides the most advanced server
virtualization and virtual infrastructure
management capabilities available at
a fraction of the cost.
Paradise #
S4A 08201E02
4,606.99
programmers.com/solarwinds
Paradise #
V87L01101A01
$
799.99
programmers.com/virtualiron
programmersparadise.com
0409vsm_TOC_003.v3
3/19/09
2:21 PM
Page 3
Contents
{ FRAMEWORKS }
16
Michael Desmond, Editor in Chief,
Visual Studio Magazine
Going Large
FEATURES
16
IDE Evolution
Microsoft Visual Studio 2010 promises significant changes, from advanced WPF
customization to support for a number of new and updated technologies. What
does the update mean for developers, and how might Visual Studio 2010 set the
stage for Microsofts flagship IDE down the road? BY KATHLEEN RICHARDS
26
DEPARTMENTS
DevDisasters
When Aptitude Leads to Futility BY ALEX PAPADIMOULIS
10
32 LANGUAGE LAB
On VB PAGE 32
Use XML Literals, WCF and LINQ to create powerful templates that can be called from
both client- and server-side code. BY STEELE PRICE
C# Corner PAGE 40
There are multiple ways to solve every problem. Strive for code that communicates
your intent and makes your meaning clear for every developer using your code.
BY BILL WAGNER
COLUMNS
3
48
47
0409vsm_WTOC_004.v3
3/19/09
3:13 PM
Page 4
Online Contents
Get the complete picture
the latest dev news, analysis
and how-to contentat
VisualStudioMagazine.com
and our partner sites in
the Redmond Developer
Network.
VISUALSTUDIOMAGAZINE.COM
REDDEVNEWS.COM
ADTMAG.COM
Practical ASP.NET
Create a Reporting Dashboard with
WebPartZones (but Without WebParts):
All you need to let your users customize
their Web pages is the ability to create
UserControls. BY PETER VOGEL
Is SOA Dead?
In an interview following her controversial
blog post, Burton Group analyst Ann
Thomas Manes explains her point was to
get the word out to enterprise architects
that they need to temper expectations
when pitching enterprise application integration projects to corporate sponsors or
else they will be nixed.
BY KATHLEEN RICHARDS
LOCATOR+ CODE: VS0904RD1
BY JOHN K. WATERS
Classic VB Corner
Working with Multiple Monitors: Most
of the time it doesnt matter where the
user puts your applications windows, but
every now and then you really need to
knowor even decide this for yourself.
BY KARL E. PETERSON
LOCATOR+ CODE: VS0904KP1
BY JEFF LEVINSON
LOCATOR+ CODE: VS0904JL1
VisualStudioMagazine.com
RedDevNews.com
ADTmag.com
Inside VSTS
Inside the TFS Databases: Get to know
the ins and outs of TfsWorkItemTracking
in the first part of this series covering the
most useful aspects of the TFS database.
Project17
1/19/09
5:24 PM
Page 1
0409vsm_Letters_6.v4
3/19/09
7:32 AM
Page 6
Letters
VisualStudioMagazine.com
April 2009 Volume 19 No. 4
Editorial Staff
Vice President, Doug Barney
Editorial Director
Editor in Chief
Michael Desmond
Executive Editor
Kathleen Richards
News Editor
Jeffrey Schwartz
Managing Editor
Wendy Gonchar
Katrina Carrasco
Contributing Editors
SharePoint
Reflections
VSM readers respond to the March 2009 cover story on the changing face of
SharePoint development.
Scott Shultz
Graphic Designer
Erin Horlacher
Online/Digital Media
Editor, VisualStudio Becky Nagel
Magazine.com
Executive Editor, New Media
Online News Editor
The tools are abysmal. The best examples Ive seen come out of Ted Pattison. His
commentary in the SDK videos pretty much sums it up. He says that someday
Microsoft will produce some great and wonderful tools, but until then you need
to learn the hard way.
Mike, California, posted online
Kurt Mackie
Gladys Rama
Shane Lee
Rita Zurcher
President
Henry Allain
The tools, quite frankly, stink. The documentation for those tools is also very,
very poor. The SharePoint developer SDK is full of examples that dont work.
Many examples are trivial, too. The fact that you have to use the tools on the
SharePoint server is just icing on the cake. Virtual PC is a real dog with a full
MOSS installation. On the other hand, so many of our clients are turned off
by the high cost of licensing SharePoint that they decide to go in another
direction instead.
JP, Kansas, posted online
Michael Domingo
Director of Marketing
Online Marketing Director
President &
Chief Executive Officer
Senior Vice President
& Chief Financial Officer
Executive Vice President
Matt N. Morollo
Michele Imgrund
Tracy S. Cook
Neal Vitale
Richard Vitale
Michael J. Valenti
Dick Blouin
Christopher M. Coates
Abraham M. Langer
Erik A. Lindgren
Doug Mashkuri
Vice President,
Attendee Marketing
Chairman of the Board
Carmel McDonagh
Jeffrey S. Klein
Visual Studio Magazine wants to hear from you! Send us your thoughts
about recent stories, technology updates or whatevers on your mind.
E-mail us at editor@visualstudiomagazine.com and be sure to include
your first and last name, city and state. Please note that letters may be
edited for form, fit and style. They express the views of the individual
authors, and do not necessarily reflect the views of the VSM editors or
1105 Media Inc.
Project3
3/18/09
9:10 AM
Page 1
0409vsm_DevDisasters_8-9.v6
3/19/09
8:01 AM
Page 8
S E RVE D U P BY A L E X PA PA D I M O U L I S
</DevDisasters>
{ SOFTWARE DEVELOPMENT GONE WRONG }
Coding Catastrophes
themselves. And who knows, we all
might even enjoy a laugh or two
while were at it.
So, welcome to the first
installment of DevDisasters
in Visual Studio Magazine.
This regular department,
which has appeared in
VSMs sibling publication
Redmond Developer
News since 2007, will
offer readers a chance
to learn the hard lessons
without taking the
hard hits.
A Painful Legacy
0409vsm_DevDisasters_8-9.v6
3/19/09
8:01 AM
5. Perform the final checks and corrections against temporary tables and then
consolidate to master tables
6. Run the appropriate reports and
send PDF-formatted documents to appropriate managers at daughter companies
This song and dance took
two people a full week to
accomplish. After sending the reports to the
100-plus managers,
they set aside
three days for
feedback and corrections from the
daughter companies, and then
went back to step
one to repeat the
process for the final
version.
Page 9
The
developers
Ol Teller
Martin had little faith that the code powering this ridiculous process would make any
more sense than the process itself. Peering
under the veneer of the ordinary-looking
spreadsheet, Martin uncovered a writhing
heap of undocumented VBA code that
made him shudder.
When Martin completed the requested
bug fixes, his boss thanked him for the
prompt turnaround. Then he quietly added:
Now, ahem, you just need to fix all of the
daughter companies importers.
As Martin begrudgingly edited each
and every one of the 100 or so different
provider importer spreadsheets, he
plotted the ways that he could tastefully
flee like there was no tomorrow. And
who knew, maybe the fifth time would be
the charm.
Death by Aptitude
Nothing screams sexy like an ad for a C#
developer job at a well-funded start-up. In
fact, when Franks recruiter presented the
opportunity to him, Frank knew it would be
a long shot. After all, he had no commercial
software experience and had only limited
Web development experience. But he did
know .NET pretty well, so he figured itd be
worth a try. Maybe his skills could translate
to a Web-based software company.
His first interview went surprisingly
well. They asked a lot of aptitude questions, as they were firm believers that
experience can be gained and skills can be
learned, but attitude never changes.
Wait What?
Once Frank finally settled into his comfy
Aeron chair and fired up his dual-monitor
workstation, he was ready to learn the code.
This, he figured, is where it would all come
together and make sense. He heeded his fellow developers warning that things were a
little beta-ish and dove right in. After all of
two minutes, he wanted to jump back out.
The pages were riddled with race conditions and generally only supported one
request at a time. The developers didnt
seem to know the difference between
Cache, ViewState and Session objects, so
they just used all three simultaneously
to make things work. As for the helper
functionsthey were perhaps the
most unique take on .NET coding
Frank had ever seen. In one baffling
case, the developers created their own
areValuesDifferent method to act as a
wrapper for object.Equals():
public bool areValuesDifferent
(object x, object y) {
... snip ...
if (0 == x.GetType().FullName
.CompareTo("System.String"))
if (0 != ((string)x)
.CompareTo((string)y))
diff = true;
if (0 == x.GetType().FullName
.CompareTo("System.Int64"))
if (0 != ((long)x)
.CompareTo((long)y))
diff = true;
... snip ...
}
0409vsm_DevInsight_10-13.v7
3/19/09
8:06 AM
Page 10
Data Services
</DevInsight>
DEVELOPER NEWS
BY JEFFREY SCHWARTZ
After months of criticism that the test build of its cloud-based
SQL Data Services (SDS) lacked the horsepower for enterprisegrade applications, Microsoft is scrapping the effort and moving
to a pure relational model instead.
Microsoft made the surprise move just one week before its
annual MIX09 conference in Las Vegas last month. Ironically, The
company announced its cloud-based database offering at MIX08,
one year before. The test version of SDS that critics panned was
based on REST and SOAP Web services interfaces.
Eliminating Web Services
Under the new plan, Microsoft will offer a pure relational database in the cloud by exposing its Tabular Data Stream (TDS)
over-the-wire protocol for accessing SQL Server via its forthcoming Azure Services Platform.
Microsoft will support traditional relational database capabilities, including SQL queries and support for relational schema
and stored procedures. While the company maintains that was
10
SDS DOA
Indeed it was the similarity between Azure Tables for storage
and SQL Server tables using the Entity Attribute Value (EAV)
model that may have helped render Microsofts first test build of
SDS dead on arrival. The two were virtually identical, says consultant and Microsoft MVP Benjamin Day of Brookline, Mass.based Benjamin Day Consulting.
The four-month test of SDS failed to meet the performance
expectations of enterprise developers such as OakLeaf Systems
Principal and VSM contributor Roger Jennings, who found it was
unable to offer the scalability of the existing SQL Server. They
offered some pseudo-relational features but they didnt offer the
ones that people really wanted, Jennings explains.
It also became clear that developers werent going to redevelop their T-SQL application for SDS. It highlights that challenge [that], as people transition to the cloud, theyre absolutely
not going to accept two different programming modelsone for
inside the firewall and one for outside the firewall, says
Forrester Research Inc. analyst Jeffrey Hammond.
Project1
2/24/09
11:22 AM
Page 1
Barcode
Mark-up
DICOM Medical
Multimedia
Develop your application with the same robust imaging technologies used by Microsoft, HP,
Sony, Canon, Kodak, GE, Siemens, the US Air Force and Veterans Affairs Hospitals.
LEADTOOLS provides developers easy access to decades of expertise in color, grayscale, document,
medical, vector and multimedia imaging development. Install LEADTOOLS to eliminate months
of research and programming time while maintaining high levels of quality, performance and
functionality.
Image Formats: All industry standards including TIFF, EXIF,
PDF, JPEG/JPEG2000, DICOM, PCL, DWG and hundreds more.
Image Compression: From standard JBIG, JBIG2, ABIC,
JPEG and CCITT G3/G4 to LEADs specialized ABC, CMP and
CMW compression.
Display Controls: Scroll, zoom, pan, magnify glass,
brightness/contrast/gamma, window level.
Image Processing: 200+ filters, transforms and color
conversion functions with extended grayscale (10 to 16-bit)
support.
OCR/ICR/OMR: Full page or zonal multi-threaded
recognition with formatted output including PDF, DOC and
TXT for Win32 and x64.
Barcode: Read/write all industry standard 1D and 2D barcodes (DataMatrix, PDF417, MicroPDF417, QR Code and more).
Forms Recognition and Processing: Automatically
identify forms and extract user filled data.
Document Cleanup/Preprocessing: Deskew, despeckle,
line and border removal, registration marks and more.
PDF and PDF/A: Read/write raster and text searchable
PDF files.
Annotations: Interactive UI for document mark-up,
redaction and image measurement (including support for
DICOM annotations).
Grayscale Imaging: Display and process signed/
unsigned 10-16 bit, 32 bit data.
0409vsm_DevInsight_10-13.v7
3/19/09
8:06 AM
Page 12
</DevInsight>
Automated Testing
REVIEW
Developer Expectations
The new offering should be welcomed by
developers, says Day: It looks like its
going to make it extremely easy for you to
deploy existing code in the cloud.
But he cautions that until the test
release is available, its too early to say
how well it will perform compared to onpremises versions of SQL Server. Well
have no idea what it will be until we run
it, he notes.
Jennings is skeptical. He pointed out
that TDS was designed to run over highspeed LANs and that its not an Internetfriendly protocol. But Matrani insists
Microsoft has already conducted extensive benchmarking and testing and performance shouldnt be a problem. We
think its appropriate for what we are
doing and the direction we are talking it,
he says. As we get more early-adopter
customers and we look at the type of
workloads theyre building, theyll keep
modifying and tweaking our protocols so
its more workload-friendly.
Matrani adds that SDS will lend itself
well to CRM applications, content management, product lifecycle management, supply chain and collaboration. But he
acknowledges that it wont initially be
suited to data warehousing and OLTP.
Day and Jennings also warn that relational data has its performance limitations. There are theoretical limits on how
scalable you can make a relational database, Day explains.
One of the unanswered questions is
that of cost. While Microsoft still hasnt
disclosed how it is pricing SDS, rival
Amazon Web Services has already lowered the bar. The company slashed the
price of its EC2 service by offering those
who sign one- or three-year commitments
to usage-based pricing that ranges from
3 cents to 24 cents per hour, depending
on configuration. That represents a
30 percent to 50 percent reduction, the
company says.
Microsoft says SDS with TDS support
will be available for testing by mid-year
and commercially available by the end of
the year. DI
Jeffrey Schwartz (jschwartz@1105media.com) is
Visual Studio Magazines news editor and the
editor of ADTmag.com.
12
The online video and the FAQ document cover these issues adequately.
The Quick Start guide offers a
fine overview of the tools basic features and environment, but it could
use some polishing and expert
review of what looked like syntax
errors in the code examples.
Recording navigation, text
input and mouse clicks are
standard fare for any test tool, but
ADCs strength becomes apparent
both during and after recording
operations.
Using Test Explorer you can
reorder, edit and disable any step to
fine-tune the test sequence. I loved
the Quick Test button for checking
an individual step without slogging
through the whole test sequence.
The powerful Convert to Code function turns a step into a highly readable C# or VB function. This is not a
scripting language. Youre coding
against strongly typed objects with
full IntelliSense and tooltip support.
WebAiis property and method
Automation Design Canvas integrates with Visual Studio 2008 to design and
run flexible tests of Web applications. Each test step remains a separate item
that you can tweak, re-order or turn into a .NET function. You might need to
add a slight pause for AJAX-enabled controls.
0409vsm_DevInsight_10-13.v7
3/19/09
8:06 AM
Page 13
input_Text_Q.Wait.ForExists(1000);
ArtOfTest Inc.
www.artoftest.com
512-535-2428
Price: $2,499 per developer machine;
$199 per execute-only machine license
Quick Facts: A sophisticated Visual
Studio 2008 plug-in for recording,
coding and executing tests of a Web
application using Internet Explorer or
Firefox.
Pros: Easy to learn and use;
powerful recording and playback
features; flexible editing of test steps;
exposes rich, strongly typed C# or VB
objects
Cons: Pricey; AJAX controls may require
special attention
Data Modeling
PRODUCTS
CA Inc.
Price: $8,000
www.ca.com
800-225-5224
ComponentOne LLC
Price: Not disclosed yet
www.componentone.com
800-858-2739
412-681-4343
Project3
3/19/09
9:08 AM
Page 1
Project3
3/19/09
9:09 AM
Page 2
0409vsm_F1VS_16-23.v7
FEATURE
3/19/09
12:55 PM
Page 16
....................................
IDE
EVOLUT
16
working on ways to modernize the developer experience for Microsofts third-largest application and flagship toolset. The Visual Studio platform architects face
the same challenges as their developer customers: How
to revitalize a pivotal legacy codebase as hardware systems, Software plus Services (S+S) and new ways of
building applications demand advancement.
Visual Studio (VS) 2010expected in beta
around the Microsoft TechEd timeframe (May 11-15,
2009)will mark the start of a major remodeling of
the IDE, according to Microsoft, a process that will
continue over several product cycles.
In the upcoming release, the Developer Division
is taking a major leap of faith by dogfooding its
unproven graphics technology. The VS 2010 beta
debuts a new code editor, user interface and shell built
on Windows Presentation Foundation (WPF), the
.NET 3.x graphics subsystem that surfaced to mixed
reviews in Vista.
Weve told developers how to make applications
that are intuitive and exciting and modern looking for
their customers, says Matt Carter, Microsofts Visual
Studio group product manager. What were trying to
do is say, You deserve an environment thats also very
easy to use and intuitive and visually appealing, but
also uses that visual appeal to really provide greater
insight into what youre working on, how the different
parts of your code and your applications are related.
A programming model to take advantage of
Vistas new graphics subsystem, WPF was designed to
modernize the user experience by enabling developers
to code against a powerful framework that housed a
subset of DirectX 3D, animation, vector graphics,
ClearType, declarative programming, data binding,
multimedia, styling and controls. The initial releases of
3/19/09
12:55 PM
Page 17
ION
.........................................
..........
0409vsm_F1VS_16-23.v7
Project1
1/21/09
11:14 AM
Page 1
Project1
1/21/09
11:15 AM
Page 2
0409vsm_F1VS_16-23.v7
FEATURE
3/19/09
12:55 PM
Page 20
..............................
0409vsm_F1VS_16-23.v7
3/19/09
12:55 PM
Page 21
...........................
plug into the appropriate subsystem? How do you de-bug and
update these components? How many extensions are feasible?
A new Extension Manager in VS 2010 lets developers access,
search and download extensions from the VSX gallery, for example, from within Visual Studio without a required VSIP package
on their machines.
Perhaps the biggest question around WPF is how it will affect
the IDEs performance. Mariani, known as a performance guy, has
acknowledged that there will be a penalty. Im expecting to take a
startup hit, he said during a Channel9
interview, noting that around 300-msec
would be acceptable.
The new IDE will be targeted at developer machines.Were going to down-level
to XP in this version, he explained, but to
get the best experience, developers need to
have a graphics accelerator (DirectX 9.0).
From a practical standpoint, WPF
also lets developers zoom in and out of
code, undock palettes and view code
and designer windows on multiple
monitors. Its easier to work in different [but integrated] projects on different screens independently from your
screen resolution, says Daron Yndem,
a Microsoft regional director and
INETA Turkey lead, who described the
WPF support as crazy good in an
e-mail. Im looking forward to the
great days where we will be able to
design our own Visual Studio interface
with full templating.
Crowded with Goodness
Designing custom toolsets appeals to
many developers, especially those who
are accustomed to downloading only the
modules they need, which is the Eclipse
model. The promise of .NET, according
to Microsoft, is that you can target so
many applicationsWindows, Office,
Web, smartphone, cloudwith a single
framework. And theres the rub: How can
a single IDE keep up?
It has been bloated for a number
of years, says Northwest Cadences
Levinson. For example, if you look at
Team Explorer, which is just a Visual
Studio Shell, thats 387MB to download
and install and if you look at something like Eclipse, that thing is around
180MB. Then when you add everything
else on, [Visual Studio] is almost 1GB.
Microsoft has heard the refrain for
yearsVisual Studio needs to be a smaller footprint and take up less resources. It
takes a long time for certain operations to
occur, where it shouldnt take that long,
says Levinson. I would like to see them
shrink it so that you only install the pack-
FEATURE
ages that you need and the shell is much smaller. He acknowledged that the ecosystem makes it hard to address a lot of these
issues in a single product cycle.
The platform wave continues in the new IDE, which will
support .NET 4.0, Windows 7, SharePoint 2007 and Microsoft
Office SharePoint Server, the Azure Services Platform and
Silverlight 2.
If youre a Visual Studio developer, you already have the core
knowledge to take advantage of all these great new innovations,
www.atalasoft.com
0409vsm_F1VS_16-23.v7
FEATURE
3/19/09
1:06 PM
Page 22
..............................
New in .NET
Framework 4.0
Visual Studio 2010 will ship with a .NET Framework
that has undergone major changes, most notably a
complete overhaul of Windows Workflow. Other noteworthy additions include:
Managed Extensibility Framework (MEF): A new
announced at PDC, fits into this strategy is unclear. The latest Oslo
community technology preview was released in January.
Improvements like the no repro debugging and the new
Test Lab Manager, a virtual machine environment that developers and testers can spin up and tear down, goes beyond quality,
asserts Carter, to a team dynamic that can be fostered with the
new software.
My read is it will enable teams on tight deadlines and budgets
to put out much higher quality code, because the effort required to
find and fix the bugs will now be greatly reduced, says Brust.
Automation and all the recording features will really help here.
VSTS 2010, which includes role-based client tools that incorporate VS Professional and a license to TFS, is the first major
upgrade to the collaboration environment since its debut in
VS 2005. TFS will drop support for SQL Server 2005 as the backend source control system and thus require an upgrade to
SQL Server 2008. Team System also rolls up the former Developer
edition into the Database edition, resulting in Architect, Tester and
Database roles in addition to Team Suite, which includes all of the
aforementioned functionality in a single SKU.
Were looking at quality across the board, says Carter.
When customers are ready to move up from doing unit testing
in Visual Studio 2010 Professional, to advanced stuff in Visual
Studio Team System, thats an easy transition. Thats really exciting
stuff things like historical debugging, not only drive quality, they
help save time and resources for your team.
Call to Action
With installable beta 1 bits expected next month, developers can
test drive the new editor and try out the code navigation. A
new Call Hierarchy feature provides inline information on code
0409vsm_F1VS_16-23.v7
3/19/09
1:06 PM
Page 23
...........................
FEATURE
GO ONLINE
Take
advantage
of our $99
hotel room
rate
09VSL_LV_VSM_adFinal.indd Sec1:2
3/13/09 7:17:38 PM
Project3
3/20/09
12:07 PM
Page 1
WPF
WCF
Lunch
VM7 Real World ASP.Net MVC in 75 Minutes!
- Gus Emery
Welcome Reception
LINQ
Agile/Design
Birds-of-a-Feather Lunch
Should a speaker be unable to attend; all efforts will be made to replace the speaker/session with one of comparable value.
09VSL_LV_VSM_adFinal.indd Sec1:3
3/13/09 7:17:47 PM
0409vsm_How-To_26-32.v5
HOW-TO
3/19/09
10:14 AM
Page 26
SHAREPOINT EXTENSIONS
SharePoint Extensions
Visual Studio 2008 Extensions for SharePoint makes developing and testing
Web Parts almost easy, provided you install it correctly. BY PETER VOGEL
26
0409vsm_How-To_26-32.v5
3/19/09
10:14 AM
Page 27
SHAREPOINT EXTENSIONS
HOW-TO
One of the primary ways to extend SharePoint is to create Web Partsthe same Web
Parts that are used in ASP.NET. But because SharePoint is an application platform
built on top of .NET, creating a Web Part project and then debugging your Web Part
inside SharePoint has always been different and awkward. In addition to making
life difficult for SharePoint developers, the troublesome process has discouraged
ASP.NET developers from bringing their skills to SharePoint.
0409vsm_How-To_26-32.v5
HOW-TO
3/19/09
10:15 AM
Page 28
SHAREPOINT EXTENSIONS
FIGURE 1. Configuring the Web service: You cant move off of this page in
the Extensions setup wizard until youve successfully configured the application pool used by the Extensions Web service.
Before adding code to the .VB or .CS file that repreplates for SharePoint components.
sents your Web Part, you should update the .XML
and .WEBPART files in the project (it doesnt appear
to be possible to change these values after debugging
your Web Part for the first time, at least in the CTP). Inside the By default, your Web Part will appear in the Add Web Parts dialog
properties element in the .WEBPART file, rewrite the default prop- in the Miscellaneous section. To have your Web Part appear in a
erty elements in the file with the title and description you want to different category, open your Web Parts XML file and add two
have displayed in SharePoints Add a Web Part dialog. This example Property tags inside the File element: One with its Name attribshows the settings for my sample search part:
ute set to Group and the other with its Name attribute set to
QuickAddGroups. With the two properties defined, set the Value
attribute on both tags to whatever value you want for your group
<properties>
name. This example will cause the part to appear in a section
<property name="Title type="string">Video Title
called PHV Tools:
Search</property>
<property name="Description" type="string">Fuzzy
search on video titles</property>
</properties>
28
<File Path="VideoSearchPart.webpart"
Url="VideoSearchPart.webpart"
Project7
3/5/09
12:14 PM
Page 1
0409vsm_How-To_26-32.v5
HOW-TO
3/19/09
10:15 AM
Page 30
SHAREPOINT EXTENSIONS
Type="GhostableInLibrary" >
<Property Name="Group Value="PHV Tools"/>
<Property Name=vvQuickAddGroups Value=PHV Tools"
/>
</File>
For my example, I created a table with four rows: the first row
contains a Label and TextBox for the user to enter the title of a
movie to search for, the second row contains a Label and a
TextBox for the user to enter a category (such as Action or
Drama), the third row contains the button to trigger the search,
and the final row holds a GridView to display the result. In the
CreateControls method, you should also wire up any events
SharePoint
vs. SQL
Is MOSS putting the squeeze on
database development?
BY JEFFREY SCHWARTZ
It has been well-chronicled how pervasive
Microsoft Office SharePoint Server
(MOSS) is becoming in the enterprise.
But for some database developers
and administratorsand in certain cases
even higher-ups in the IT food chain
SharePoints rampant growth is a concern,
particularly in organizations where data
that belongs in SQL Server is finding its
way into MOSS. You dont have to be a
developer to go in there, says Ed Smith,
a systems analyst at Tetra Pak
International, a global supplier of
The event routine pulls data from the two TextBoxes in the table
(in the first and second rows) and fills a DataSet that is bound to
a GridView (in the fourth row):
Private Sub StartSearch(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim conn As New SqlConnection("")
Dim cm As SqlCommand = conn.CreateCommand
Dim da As New SqlDataAdapter(cm)
Dim ds As New System.Data.DataSet
Dim searchString As String
30
that your Part needs. This code adds a button to the table and
wires an event routine to it:
0409vsm_How-To_26-32.v5
3/19/09
10:15 AM
Page 31
SHAREPOINT EXTENSIONS
SharePoint will now allow the user to set a value for the Category
property by selecting the Personalize this Page choice on the
Welcome Usermenu at the top of the page to put the page in personalization mode. Once the user enters a value, SharePoint will
ensure that the property is automatically set to that value whenever
the user returns to the page.
gv.DataSource = ds
gv.DataMember = "Results"
gv.DataBind()
End Sub
Simple Debugging
At this point, you get the real payoff for the work youve done in setting up SharePoint Extensions and configuring your project: to test
and debug your project you just set breakpoints in your code and
press F5. When your site displays, youll need to add your Web Part
to a page by selecting, from the Site Actions menu, the Edit Page
choice. When the page redisplays in Edit Mode, click on any of the
Add Web Parts bars to display the Add a Web Part dialog with your
Web Part. After adding the Web Part to your page youll find that
you can debug it as you would any other .NET project type.
The SharePoint Extensions are a real boon for developers
creating SharePoint apps. In addition to simplifying the process
for creating new Web Part projects, the debugging process is
much simpler. Not only does this make life easier for
SharePoint developers, it lowers the barrier to entry for
ASP.NET developers interested in migrating their skills to the
SharePoint arena. VSM
Peter Vogel (peter.vogel@phvis.com) is a principal in PH&V Information
Services, specializing in ASP.NET development with expertise in SOA, XML,
database and UI design. Hes written several books on app development using
Microsoft technologies and presents at conferences around the world.
GO ONLINE
HOW-TO
Adding Controls
Still, others argue that companies need to
understand when to build applications for
SQL Server versus SharePoint. Looking
at SharePoint Lists and relational databases, there isnt a comparison, says
Graham Sutcliffe, director of technology
at RD2 Inc., a Dallas-based design firm.
They both have their uses. You
cant stifle an organizations progression,
but you have to put people in charge of
its data. Not trusting the data is the same
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 32
</Language Lab>
YO U R CO D E S OU RC E
IN THIS SECTION:
XML Literals
XML Literals
{ ON VB }
XML Literals,
WCF and LINQ
Learn how to create powerful templates that can be
called from both client- and server-side code.
BY STEELE PRICE
One of the great things about .NET Framework is that there is
so much included to make your life as a developer easier. Over
the past few years weve been flooded with new capabilities.
Staying current with all of these tools is nearly a full-time job.
So whats a developer to do? I choose to pick the tools that apply
directly to a problem I need to solve and use those new capabilities to enhance my productivity. Even more power and flexibility comes when we can take several of these capabilities and
combine them for a unique solution to a problem.
Were going to look specifically at three pieces of the
framework that can be combined to provide a new technique.
This technique helps in writing more responsive ASP.NET pages,
while at the same time making the code more readable. The
three technologies are: XML literals, Windows Communication
Foundation (WCF) Factory Services and LINQ. XML literals
and LINQ are new in Visual Basic 9 (VB9). LINQ gives us a
common syntax for querying just about any data, be it SQL,
XML or objects. Even though WCF has been here for a while,
the out-of-the-box readiness for building factory services is little-known. Here well show you how to create WCF services without changes to config files for endpoints, behaviors and bindings.
XML Literals
VB9 includes XML literals, an incredibly useful new tool. With
XML literals, what used to be an archaic, difficult process of
reading and writing raw XML or XHTML has become straightforward and simple. Type raw XML into the Visual Studio
Editor and it understands that you want an XElement. An XML
literal on its own is a remarkable piece of technology that can
help VB developers in many, many ways.
What used to make code difficult to read becomes transparent when using XML literals. For example, using a
StringBuilder to write long strings makes writing joined strings
easier and more performant:
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 33
Language Lab
On VB
XML Literals
Dim MyTable = _
<table>
<tr>
<td>
First Cell Contents
</td>
<td>
Second Cell Contents
</td>
</tr>
</table>
FIGURE 1. When you add a new template to your Web application, it appears in the My
Templates area at the bottom of the Add New Item dialog box.
Imports <xmlns=
"http://schemas.microsoft.com/
winfx/2006/xaml/presentation">
Imports <xmlns:x=
"http://schemas.microsoft.com/
winfx/2006/xaml">
Imports System.Windows.Markup
The result of all this is that you can do things the same way for
code behind as you are used to doing in ASPX source view.
Productivity increases by continuing to write markup this way.
You do not have to learn another language or syntax to achieve
the same in code behind.
Embedded expressions also look very similar to what you
are used to seeing in markup:
<td><%= item.@id %></td>
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 34
</Language Lab>
XML Literals
On VB
34
0208vsm_VSMPureAd.final
1/18/08
11:46 AM
Page 32
PURE
E N T E R P R I S E
S O L U T I O N S
F O R
.N E T
D E V E L O P M E N T
M A G A Z I N E . C O M
OPTIMIZED FOR
PRINT ONLINE EVENTS
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 36
</Language Lab>
On VB
XML Literals
36
error: function(result) {
var msg = '';
if (result.get_message) {
msg = 'Error: ' + result.get_message();
} else {
msg = result.responseText;
if (msg == '') {
msg = 'Error: Unknown... missing Service?'; }
}
alert(msg);
target.innerHTML = '';
}
});
}
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 37
On VB
Lambdas are a new feature in VB9 and can save you a lot of
hassle when you need a quick function. LINQ itself is actually a framework
built on lambda expressions and are an integral part of how it works.
i.@id %></td>
i.@Name %></td>
i.@Start %></td>
i.@End %></td>
Catch ex As Exception
' This is not returning a StackTrace,
' its a shortcut to get the current Method Name
Throw New FaultException(New StackTrace() _
.GetFrame(0).GetMethod() _
.Name & ": " & ex.Message)
Return Nothing
End Try
End Function
Imports System.Web.Script.Serialization
Imports System.Runtime.Serialization
Namespace Services
''' <summary>
''' This Service provides access to various
''' MyFactoryService procedures through WCF
''' </summary>
''' <remarks></remarks>
<ServiceBehavior( _
IncludeExceptionDetailInFaults:=True)> _
<ServiceContract(Namespace:="Services", Name:= _
"MyFactoryService")> _
<AspNetCompatibilityRequirements( _
RequirementsMode:= _
AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class MyService
XML Literals
<tr>
<td><%=
<td><%=
<td><%=
<td><%=
</tr> _
%>
</table>
Return result
<OperationContract()> _
Public Sub DoWork()
End Sub
End Class
End Namespace
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 38
</Language Lab>
On VB
XML Literals
38
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 39
Instantly Search
Terabytes of Text
The Bottom Line
Currently, nothing else is this flexible and this easy with the outof-the-box tools we get with Visual Studio 2008. You have complete access to all the features of .NET Framework for building
your templates. Calling them from both the client and server is
extremely easy, and because youre using WCF, thers no added
page lifecycle overhead. A similar service can be created to return
XAML instead of XHTML. This makes migrating or extending
your templates extremely easy if you need access from Silverlight
or WPF in the future.
T4 templates and other code generator-based utilities are
great when you can generate everything in advance. This technique goes beyond that to generate during runtime, and we can
generate runtime-ready code in any XML derivative such as
XAML and XHTML.
ASP.NET 4.0 is expected to provide a new template system,
but that doesnt change the usefulness of this technique. ASP.NET
4.0 will be using a completely different system, which may or may
not be as easy to use and as flexible in what it returns. From what
Ive seen so far, it looks good, but it still doesnt solve the immediate
issues that are addressed by using this technique.
XML literals, WCF factory services and LINQ, taken by
themselves, are very useful. When these are combined, you get a
completely different picture for solving real-world problems. All
while maintaining a productive, easy-to-implement style.
XML literals provide high productivity and readability
when writing structured XML in code behind. It can also help
format long or complex strings to make them more readable.
Embedded expressions give you the power to insert external
data into the XML in a very easy-to-read and -maintain way.
WCF factory services allow you to extend the power of the
framework to your client-side code without the hassle of all the
configuration knobs and buttons that are available to WCF
services. Starting with a factory service does not limit you in any
way from upgrading to the full configuration format later. A
simple change enables a progressive upgrade path when you
need this ability.
Finally, using LINQ in embedded expressions enables you
to insert external data into XML in a way that is easy to read,
with much less code to accomplish the task. LINQ allows you to
start thinking differently about how you process loops through
any data utilizing the same syntax. Now go see what you can do
with all this new power and productivity. VSM
Steele Price (steeleprice@usa.net) has been professionally designing and
developing data-driven applications for more than 25 years. He has been a
Microsoft MVP for Visual Basic since 2005 and frequently works with the
Microsoft VB team to help improve the language. Price is currently chief
technology officer at Digital Dreamshop, a micro ISV developing enterprise
applications with VB.NET, Silverlight, Windows Presentation Foundation
and LINQ.
N dozens of indexed,
unindexed,
fielded data and
full-text search
options (including
Unicode support
for hundreds
of international
languages)
N file parsers /
converters for
hit-highlighted
display of all
popular file
types
N Spider supports
static and
dynamic web
data; highlights
hits while
displaying links,
formatting and
images intact
h Spider
Desktop wit
h Spider
Network wit
CD/DVDs
Publish for
pider
Web with S
Win & .NET
Engine for
Linux
Engine for
New
64-bit
GO ONLINE
READ MORE
VS0904OV Read this article online.
1-800-IT-FINDS www.dtsearch.com
VisualStudioMagazine.com April 2009 VISUAL STUDIO MAGAZINE 39
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 40
</Language Lab>
{ C#CORNER }
Clear Code
One less line of code, and that means one less bit of work for
every use of your library. Of course, this first change leads to the
obvious change of making the NumericAlgorithms class a static
class:
public static class NumericAlgorithm
This version allows users to call your library using any type of
collection: a list, an array or even a dynamically read sequence
as Im using above.
This changes the signatures of all the methods in the class:
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 41
C# Corner
C#
Avoiding Problems
I wrote this sample to be representative of common production
code I see in libraries. Too often, many of the developers I work
with create libraries from the inside out. They have strong
knowledge about how theyll implement a particular set of features, and that knowledge deeply colors how they create the
functionality. Those assumptions show up quickly in the test
code. Its especially evident in the test code that demonstrates
the successful scenarios for your library. For example, lets look
again at one of the first test samples for the original library:
Clear Code
[TestMethod()]
public void MedianSimpleTest()
{
NumericAlgorithm target = new NumericAlgorithm();
List<double> sequence = new
List<double>(Enumerable.Range(0, 50).
Select(n => (double)n));
double expected = 25;
double actual = target.Median(sequence);
Assert.AreEqual(expected, actual);
}
return total;
}
[TestMethod()]
public void MedianSimpleTest()
{
IEnumerable<double> sequence = Enumerable.Range(
0, 50).Select(n => (double)n);
double expected = 25;
double actual = NumericAlgorithm.Median(sequence);
Assert.AreEqual(expected, actual);
}
Theres not a huge difference in size. You may not easily see benefits when you examine a single test method. Instead, seriously
examine the clarity of the test code. Is it clear what the test code
is trying to do? Is it clear how to use the API?
The second test, which executes the exact same actions, has
less code thats unrelated to the problem at hand. Its easier to
understand exactly what test is executing. (I realize that the
Enumerable.Range() method may be unfamiliar if you dont
use LINQ much, but thats not related to the API.) In fact, using
the new version, you could replace the range call with an array,
or any other storage.
I look at test code as a way to evaluate the code that client
developers will need to write. When possible, Ill write the success scenario tests before I create any of the library code. That
forces me to think about the problem and the solution through
a client developers eyes: What code would I want to call in
order to solve a given problem? If I start by writing the library
code, Ill create a library that looks like how I solved the problem, not a library that looks like how I want to use a solution.
Of course, not every project can be written that way. Too
often, were extending existing systems that dont have a test
framework already in use. In that case, youll end up working
through the tasks I outlined earlier in this article: create the
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 42
</Language Lab>
C# Corner
Clear Code
tests; look at the code in the tests; and modify the library
until you have the API youd like. At each step, look at
your testsespecially the success testsand decide if the API
is as convenient as it could be. If not, you should continue to
make modifications until you have an API that matches your
expectations.
Structuring Your Code
Compare the initial version of the library with the final version
(see Go Online for how to access a sample of the final version).
Even with only a few methods, you can see more clarity in how
the library will use its parameters and how it can be used. The
API more clearly describes how it will be used.
Think about your own classes and examine if they communicate their intent and their use for other developers. Does
their structure communicate your design intent? If not, modify
the public API until it matches your assumptions about the
usage of your classes.
{ A S K K AT H L E E N }
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 43
Ask Kathleen
Overriding the OnStartup method lets you prepare the container when your application starts:
You can also use an arbitrary string to identify the export, but
the common case for extensions is to retrieve via an interface
contract. The ExportMetadata attribute lets you include extra
information about the extension that the host can retrieve without actually instantiating the underlying object, which lets you
control instantiation and protects performance.
When you design your solution, put interfaces in a separate assembly referenced by both the host and all extension
assemblies. Do not establish any direct references between your
host and extensions. All of your assemblies will need a reference
to System.ComponentModel.Composition.dll. Your compiled
extensions will need to be placed in a convenient location. You
can specify the build location in the Project Properties dialog.
The host is responsible for managing the CompositionContainer. The CompositionContainer hooks up imports
and exports behind the scenes and must know what exports are
available. Creating the container as a project level variable lets you
clean it up in OnExit. The call to the containers Dispose method
disposes of any parts that implement IDisposable:
Protected Overrides Sub OnExit( _
ByVal e As System.Windows.ExitEventArgs)
MyBase.OnExit(e)
If mContainer IsNot Nothing Then
mContainer.Dispose()
End If
End Sub
MEF
End Class
8VcNdj8ji9ZkZadebZci8dhih
7n>cXgZVh^c\EgdYjXi^k^in4
7Z[dgZGVaan!lZhigj\\aZYideg^dg^i^oZl]VidjgXjhidbZgh
gZVaancZZYZY#CdllZldg`dci]Z]^\]ZhikVajZegd_ZXih
ZkZgnildlZZ`h#6cY!lZkZgZYjXZYgZaZVhZi^bZhWn*%#
6\^aZVcYGVaanXVcXjindjgi^bZ"id"bVg`Zi
Wn*%VcY^cXgZVhZegdYjXi^k^inWn'*#
;h_a>kZZb[ijed" 8ID!>cdk^h
=ZVgi]Zl]daZhidgnVcYhZZl]nGVaan^hi]Zdcan
6\^aZA^[ZXnXaZBVcV\ZbZcikZcYdgid\jVgVciZZndjghjXXZhh#
AZVgcbdgZVilll#gVaanYZk#Xdb
'%%.GVaanHd[ilVgZ9ZkZadebZci8dge
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 44
</Language Lab>
Ask Kathleen
MEF
While this works, your goal is to make life as easy as possible for
programmers writing extensions. This metadata approach requires they
know to use the exact string "MenuCaption". Its easy to fix this using
strongly typed MEF metadata.
cat.Catalogs.Add(New AssemblyCatalog( _
Me.GetType.Assembly))
mContainer = New CompositionContainer(cat)
End Property
44
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 45
Ask Kathleen
<Export(GetType(Main))> _
Partial Public Class Main
End Sub
Note that the menu caption is retrieved from the MEF metadata.
While this works, your goal is to make life as easy as possible for
programmers writing extensions. This metadata approach
requires they know to use the exact string "MenuCaption". Its
easy to fix this using strongly typed MEF metadata. To begin,
create an interface:
Public Interface IExtensionMetadata
ReadOnly Property MenuCaption() As String
End Interface
Now create an attribute that parallels this interface. This attribute needs to match the metadata interface. It does not need to
implement the interface, but this is the easiest way to keep them
in sync:
MEF
<MetadataAttribute(), AttributeUsage( _
AttributeTargets.Class)> _
Public Class ExtensionMetadataAttribute
Inherits Attribute
Implements IExtensionMetadata
Private mMenuCaption As String
Public Sub New(ByVal menuCaption As String)
mMenuCaption = menuCaption
End Sub
Public ReadOnly Property MenuCaption() _
As String Implements IExtensionMetadata.MenuCaption
Software Protection
Document Protection
Access Protection
Media Protection
Control Network
etwork Licensing
Pay-Per-Use Counter
0409vsm_Langlab_32-46.v11
3/19/09
10:57 AM
Page 46
</Language Lab>
Ask Kathleen
<Import(GetType(IExtension))> _
Private exportExtensions As ExportCollection( _
Of IExtension, IExtensionMetadata)
<Import(GetType(ITextToDisplay))> _
Private textToDisplay As ITextToDisplay
newItem.Header = export.MetadataView.MenuCaption
Get
Return mMenuCaption
End Get
End Property
End Class
MEF
<Export(GetType(IExtension))> _
<ExtensionMetadata("First")> _
Partial Public Class First
While Ive answered your question, I dont think Ive solved your
problem yet. At this point, the windows display but do not interact
with each other or the rest of your application. That next step is
easy because MEF makes no distinction between extensions and
host while resolving Import and Export attributes. The sample in
the download uses additional interfaces to provide a string to
extensions from the host as a simple demonstration. Your app will
probably provide more sophisticated functionality such as the
parent window, where extension user controls or specific business objects or application data should be sited.
Its valuable to export classes, not primitive values or structures. The values of reference types will reflect changes as your
application proceeds rather than reflecting only the value MEF
supplied at composition. This also means two-way communications can be provided either through mutable objects that allow
changes, or through immutable objects that expose specific data.
In addition to host/extension interactions, multiple extensions
can communicate with each other using interfaces that are
entirely unknown to the host or initial programmers.
The compiler shortcuts recompiling non-referenced
assemblies and a composable application doesnt maintain references. Avoid problems with out-of-date assemblies by using
Rebuild Solution before testing your application.
MEF is similar to System.AddIn (also called MAF), which I
discussed in April 2008 (see Extend Your Apps with External
Add-Ins). MAF is significantly more complex to use, but solves
additional problems of isolation and versioning. MEF extensions
run in the AppDomain of the host, with the rights of your
AppDomain. This means when using MEF you must trust extensions not to run malicious code, or offer protection via Code
Access Security. MAF solves this problem by creating extensions
in a separate AppDomain, which you can lock down or sandbox.
46
0409vsm_AdIndex_47.v2
3/19/09
4:35 PM
Page 47
Advertising Sales
Ad Index
Advertiser
/n Software Inc.
Page
7
www.nsoftware.com
Accusoft Pegasus
23
www.accusoft.com
AppDev Training
East
29
www.appdev.com
Aspose
Andrew Mintz
National Sales Manager
Phone: 508-532-1433
amintz@1105media.com
C3
www.aspose.com
Atalasoft Inc.
21
www.atalasoft.com
ComponentArt Inc.
14, 15
www.componentart.com
dtSearch Corp.
West
Chris Kourtoglou
Regional Sales Manager
Phone: 650-579-0121
ckourtoglou@1105media.com
39
www.dtsearch.com
ESRI
www.esri.com
Intel Corp.
C4
www.intel.com
Production Coordinator
Serena Barnes
Phone: 818-734-1520 ext 164
vsmadproduction@1105media.com
sbarnes@1105media.com
11
www.leadtools.com
Microsoft Corp.
18, 19
www.microsoft.com
Rally Software
43
www.rallydev.com
Software FX
C2,1
www.software FX.com
35
http://visualstudiomagazine.com
24, 25
http://vslive.com/
www.waysidetechnology.com
ID Statement
Visual Studio Magazine (ISSN 1537-002X) is published
monthly by 1105 Media Inc., 9121 Oakdale Avenue,
Ste. 101, Chatsworth, CA 91311. Periodicals postage
paid at Chatsworth, CA 91311-9998, and at additional
mailing offices. Complimentary subscriptions are sent
to qualifying subscribers. Annual subscription rates for
non-qualified subscribers are: U.S. $34.97, Canada
$52.97 (U.S. funds); International $78.97 (U.S. funds).
Subscription inquiries, back issue requests, and
address changes: Mail to: Visual Studio Magazine,
P.O. Box 1164, Skokie, IL 60076-8164, e-mail
VSMmag@1105service.com or call toll free 888-7688759, fax number 847-763-9564. International calls
847-763-9135. POSTMASTER: Send address changes
to Visual Studio Magazine, P.O. Box 1164, Skokie, IL
60076-8164. Canada Publications Mail Agreement No:
40612608. Return Undeliverable Canadian Addresses
to Circulation Dept. or Bleuchip International, P.O. Box
25542, London, ON N6C 6B2.
Copyright Statement
Copyright 2009 by 1105 Media, Inc. All rights
reserved. Printed in the U.S.A. Reproductions in
whole or part prohibited except by written permission. Mail requests to "Permissions Editor," c/o Visual
Studio Magazine, 2600 El Camino Real, Ste 300, San
Mateo, CA 94403.
Legal Disclaimer
The information in this magazine has not undergone
any formal testing by 1105 Media, Inc. and is distributed without any warranty expressed or implied.
Implementation or use of any information contained
herein is the reader's sole responsibility. While the
45
www.wibu.com
Editorial Index
AAmazon.com Inc.
Corporate Address
www.amazon.com
ArtOfTest Inc.
12, 48
12, 13
www.artoftest.com
Media Kits
CA Inc.
www.ca.com
13
Capgemini
20
www.us.capgemini.com
ComponentOne LLC
13
www.componentone.com
13
www.embarcadero.com
Exeros Inc.
13
www.exeros.com
Reprints
For single article reprints (in minimum quantities of
250-500), e-prints, plaques and posters contact:
PARS International
Phone: 212-221-9595
E-mail: 1105reprints@parsintl.com
Online: www.magreprints.com/QuickQuote.asp
IBM Corp.
13
www.ibm.com
31
www.infostratasolutions.com
16
www.magenic.com
20, 21
www.nwcadence.com
List Rental
This publications subscriber list, as well as other
lists from 1105 Media Inc., are available for rental.
For more information, please contact our list manager,
Merit Direct.
Phone: 914-368-1000
E-mail: 1105media@meritdirect.com
Online: www.meritdirect.com
13
www.quest.com
SAP AG
13
www.sap.com
Sybase Inc.
13
www.sybase.com
47
0409vsm_RedReview_48.v4
3/19/09
2:36 PM
Page 48
Developer News
</Redmond
Review>
BY ANDREW BRUST
database work (in other words, almost all .NET developers), this first
cut at SDS didnt make much sense. Microsoft had turned SQL Server
into a structured storage repository instead of a relational database,
and had implicitly told developers that if they wanted to move to
the cloud, theyd need to re-design their databases and re-write
their code. Ouch.
To call Microsoft tone deaf on this issue would be an understatement. But eventually the SDS team heard the music, and got
the rhythm. On Feb. 23, at the co-located VSLive!/Microsoft
Developer Conference in San Francisco, Microsoft hinted that they
would re-jigger the SDS model to be relational, and on March 10 it
announced through the SDS team blog that SDS would, in fact, be a
cloud-based SQL Server, accessible via T-SQL over Tabular Data
Stream (TDS), SQL Servers native protocol. Apparently, existing onpremises .NET/SQL Server code will work fine with the new SDS;
only a change in connection string will be necessary to turn SQL
Server code into SDS code.
So Redmond listened to its customers, and the bizarre obsession with copying Amazons SimpleDB Web service is over. Microsoft
has given us a truly simple offering: the SQL Server technology that
most Microsoft developers have been using for a decade and some
have been using since even before my
first column was published.
Whats old is new, I suppose. For
database technologies as well as columnists. Aligning SQL in the cloud to SQL
on the ground is about more than just
common sense. Its about getting things
done. Yes, the cloud, done right, will differ from on-premises technology. It will
offer dynamic scaling and utility-based
pricing. In short, it will lower the barrier to entry for getting applications up and running, and keeping them running smoothly.
But the cloud, done right, will reflect and preserve familiar
on-premises technology, too. Because the cloud isnt just about
how cool it is to run your application up there. Its about easily
provisioning the servers and services you need to run your business down here. SDS 1.0 had its head in the clouds; SDS 1.1 is
appropriately down to earth. A compatibility layer indeed. VSM
48
Project1
2/24/09
10:18 AM
Page 1
Project1
2/25/09
8:40 AM
Page 1
2009, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and other countries. *Other names and brands may be claimed as the property of others.