Pluralsight + InnerWorkings .NET Training Special @ TechEd 2010

Pluralsight + InnerWorkings .NET Training Special @ TechEd 2010

Having a hard time choosing between Pluralsight and InnerWorkings? This week at TechEd you don’t have to!

Pluralsight has joined forces with InnerWorkings to provide an amazing .NET training special to attendees this week. Both companies offer best-of-breed .NET training solutions that are very complimentary to one another. Pluralsight offers the highest quality On-Demand! training videos on the market while InnerWorkings offers an innovative hands-on learning solution fully integrated with Visual Studio. Combining these two best-of-breed solutions offers you an unparalleled self-paced learning environment for ramping-up on .NET technologies.

All Teched 2010 attendees have the opportunity to purchase a full subscription to both training libraries for the price of one. Simply visit the Pluralsight or InnerWorkings booth this week to register for the offer.

poster_almost_final

Pluralsight sessions at Teched this week

Pluralsight sessions at Teched this week

Several members of the Pluralsight technical staff are here in New Orleans this week speaking at TechEd. Below you’ll find a list of their talks for easy reference.

Aaron Skonnard

ASI312 What's New in Windows Communication, 6/9/2010 11:45AM

ASI308 Programming AppFabric: Moving Microsoft .NET to the Cloud, 6/10/2010 3:15PM

Keith Brown

BOF07-DV Claims-Based Identity, 6/10/2010 8:00AM

ASI308 Programming AppFabric: Moving Microsoft .NET to the Cloud, 6/10/2010 3:15PM

Matt Milner

ASI201 Intro to Workflow Services and Windows Server AppFabric, 6/8/2010 1:30PM

BOF11-DV How Are YOU Using Windows Azure?, 6/8/2010 5:00PM

David Starr

BOF02-DV What's Really Happening with Agile Teams in the Wild?, 6/7/2010 2:45PM

BOF08-DV Behavior-Driven Development in the Wild, 6/9/2010 1:30PM

DPR302 Behavior-Driven Development in the Real World, 6/10/2010 1:30PM

In addition to this group, there are several Pluralsight technical contributors (On-Demand! authors) here this week speaking, including Julie Lerman, Kate Gregory, Dan Wahlin, Russ Fustino, and several more who are actively authoring new courses for us right now. All of these folks are amazing speakers – so be sure to check them out.

Pluralsight at TechEd 2010 in NOLA

Pluralsight at TechEd 2010 in NOLA

Pluralsight has a strong presence at Teched 2010 in New Orleans this week. About 18 of us are here from Pluralsight, including full time staff, instructors, and On-Demand! authors. Four of us are speaking at the show, including myself, Keith Brown, Matt Milner, and David Starr. If you’re here this week, please come by and say hello. We’d love to meet you in person and get your feedback on the Pluralsight training experience.

We are in booth #2544, which is a little off the beaten path. When you enter the exhibit hall, it’s in the back left corner of the room. We have over 400 cool t-shirts to give away, along with some complimentary On-Demand! subscriptions (good for 2-weeks of free training), some full-year subscriptions that we’re raffling off each day, and details on how you can enter an iPad drawing, which will take place online a week after the event.

photo

We’re also doing a limited time special promotion with InnerWorkings for all TechEd attendees. It provides an amazing deal that allows TechEd attendees to purchase a full training subscription to both of our libraries for the price of one. You’ll need to come by either the Pluralsight or InnerWorkings booth to get registered for the offer before the end of the week. Then you’ll have until the end of the month to act on it.

Pluralsight is making a few exciting product announcements this week, which I’ll write more about in a separate post. To summarize, we’re introducing virtual training (think Live Meeting delivery) as a first class citizen in our product line-up – at an amazing price point I might add – and we’re incorporating virtual training benefits into our On-Demand! subscriptions. We are confident this new addition will drive more value to all Pluralsight customers, and especially On-Demand! subscribers, and increase your training ROI throughout the year.

Finally, Pluralsight is hosting a small customer appreciation event on Wed night in the French quarter. If you’re here, you can get an invite at the Pluralsight booth. Space is limited so come by early in the week.

Have a great TechEd everyone!

Recordings from the BizTalk Performance meeting at the Swedish BizTalk User Group

The videos from the BizTalk performance talk by me and Ewan Fairweather  has finally got published on msdn.

Instrument your BizTalk Server

Optimizing and verifying your BizTalk Server installation is not an easy thing to do. The documentation is good but very extensive. This presentation aims to guide you through the most important operations you need to do in order to boost the performance of BizTalk.

Performance Optimization Patterns

This session will present architectural, design, and development patterns to improve BizTalk processing performance. "Performance" can be expressed by latency and/or throughput, and this session will cover aspects of both. This will include pipeline and orchestration patterns to increase throughput, reduce latency, and reduce memory usage during BizTalk processing. We will also cover the results from BizTalk CAT recent Perf engagements.

endpoint.tv – Activity Designers and Designer Rehosting with Kushal Shah

Windows Workflow Foundation in .Net 4 (WF4) makes it possible for you to build custom activity designers that allow different kinds of users to graphically design business processes. In this episode, Kushal Shah, program manager for the Workflow Designer team, shows us how you can build custom activities with support for the developers and end users who collaborate to build business processes.

Dowload the sample code from this video

For more information, see the Windows Workflow Foundation Developer Center on MSDN.

Using the LOB Activity in AppFabric workflows

 

1.       Right-clicking the workflow project, will show the Add Adapter Service Reference… menu item. 
 

 

2.       This shows the familiar Add Adapter Service Reference dialog box.  (Don’t you all agree this tool still looks too much of ‘Form1/Button1’ app? J).  After selecting the sqlBinding and providing the ServerName and DataBaseName, the connection was made.

3.       This showed all the available metadata for this connection.  It is possible to select stored procedures or tables that will be used in the process.

 

4.       Since the LoanRequest needs to be inserted in the database table, the Client contract type was specified and the correct table (LoanRequests) and operation (Insert) were selected.

 

Using the LOB activity.

 

1.       After clicking OK and performing a rebuild on the project, a new custom activity was added to the Workflow Designer toolbox.  Each operation (Insert, Update …) that was selected results in a specific activity that is part of a category with the database object name.

2.       Dragging this activity on the canvas, shows that the following parameters can be specified on the shape.

 

3.       I only declared the variable ‘saveLoanResult’ that represents the records that should be added to the database.   This variable was linked with the Rows parameter of the InsertActivity shape and is an Array of LoanRequest objects.

4.       The InsertResult parameter would return the result of the database activity, but this parameter is optional, so I did not link it with a variable here.

 

5.       The BizTalk mapper activity was added right before the InsertActivity shape.  Here, I defined a mapping between the loanRequest and the databaseInsert.

6.       Compiling the project and executing the workflow, resulted in a new record in my database table.
 

 

 

Conclusion

The power of connectivity and adapter is now made available to the AppFabric platform in a standardized and user-friendly way.  It is now also easy to connect to various LOB systems, databases and host systems (using the BizTalk Adapters for Host Systems). 

What is not clear at this point is how the licensing will work for these AppFabric features.  But more information about that can probably be expected by the time of the public release.

Sam Vanhoutte

Use Expressions with LINQ to Entities

[Source: http://geekswithblogs.net/EltonStoneman]
Recently I’ve been putting together a generic approach for paging the response from a WCF service. Paging changes the service signature, so it’s not as simple as adding a behavior to an existing service in config, but the complexity of the paging is isolated in a generic base class.
We’re using the Entity Framework talking to SQL Server, so when we ask for a page using LINQ’s.Take() method we get a nice efficient SQL query for just the rows we want, with minimal impact on SQL Server and network traffic. We use the maximum ID of the record returned as a high-water mark (rather than using .Skip() to go to the next record), so the approach caters for records being deleted between page requests.
In the paged response we include a HasMorePages indicator, computed by comparing the max ID in the page of results to the max ID for the whole resultset – if the latter is bigger, then there are more pages.
In some quick performance testing, the paged version of the service performed much more slowly than the unpaged version, which was unexpected. We narrowed it down to the code which gets the max ID for the full resultset – instead of building an efficient MAX() SQL query, EF was returning the whole resultset and then computing the max ID in the service layer.
It’s easy to reproduce – take this AdventureWorks query:
var context = new AdventureWorksEntities();
var query = from od in context.SalesOrderDetail
where od.ModifiedDate >= modified
&& od.SalesOrderDetailID.CompareTo(id) > 0
orderby od.SalesOrderDetailID
select od;
We can find the maximum SalesOrderDetailID like this:
var maxIdEfficiently = query.Max(od => od.SalesOrderDetailID);
which produces our efficient MAX() SQL query. If we’re doing this generically and we already have the ID function in a Func:
Func<SalesOrderDetail, int> idFunc = od => od.SalesOrderDetailID;
var maxIdInefficiently = query.Max(idFunc);
This fetches all the results from the query and then runs the Max() function in code. If you look at the difference in Reflector, the first call passes an Expression to the Max(), while the second call passes a Func. So it’s an easy fix – wrap the Func in an Expression:
Expression<Func<SalesOrderDetail, int>> idExpression = od => od.SalesOrderDetailID;
var maxIdEfficientlyAgain = query.Max(idExpression);
– and we’re back to running an efficient MAX() statement.
Evidently the EF provider can dissect an Expression and build its equivalent in SQL, but it can’t do that with Funcs.