Distributed applications are tricky. The internet is a fickle beast that will lost data at will and run counter to many intuitions. Getting distributed applications to run smoothly and performant at scale is particularly difficult. There isn’t a single "go fast" silver bullet, rather it’s more of an art. At PDC this year you’ll have a great opportunity to learn about the Zen of WCF Performance and Scale at Nicholas Allen‘s lunch session. Enjoy!
Author Archives: kenny
WCF talks at PDC
Matt posted a great description of the WCF (and WF) talks we’re giving at PDC.
In particular there are two sessions that I’d like to call out.
The first is Ed Pinto’s session, where you’ll find out about the significant investments we’ve made to improve the WCF authoring experience:
WCF 4.0: Building WCF Services with WF in Microsoft .NET 4.0.
Eliminate the tradeoff between ease of service authoring and performant, scalable services. Hear about significant enhancements in Windows Communication Foundation (WCF) 4.0 and Windows Workflow Foundation (WF) 4.0 to deal with the ever increasing complexity of communication. Learn how to use WCF to correlate messages to service instances using transport, context, and application payloads. See how the new WF messaging activities enable the modeling of rich protocols. Learn how WCF provides a default host for workflows exposing features such as distributed compensation and discovery. See how service definition in XAML completes the union of WF and WCF with a unified authoring experience that simplifies configuration and is fully integrated with IIS activation and deployment.
Once you’ve built your services, you will need to deploy, host, and manage them. Windows Server "Dublin" handles this complexity, and Dan Eshner will unveil the details here:
Hosting Workflows and Services
Hear about extensions being made to Windows Server to provide a feature-rich middle-tier execution and deployment environment for Windows Workflow Foundation (WF) and Windows Communication Foundation (WCF) applications. Learn about the architecture of this new extension, how it works, how to take advantage of it, and the features it provides that simplify deployment, management, and troubleshooting of workflows and services.
PDC 2008
I’ve gone dark on the technical side of this blog for two main reasons:
- Most of what I’m working on hasn’t been publicly disclosed
- I’m prepping for PDC 2008 where I can finally discuss the past 2 years of my life without an NDA 🙂
If you want to see the latest and greatest Microsoft technologies that we’ve been cooking up, register now, and then mark your schedule for my talk:
Windows Workflow Foundation 4.0: A First Look
Programs coordinate work. The code for coordination and state management often obscures a program’s purpose. Learn how programming with Windows Workflow Foundation (WF) 4.0 provides clarity of intent while preserving the functional richness of the .NET framework. See how easy it is to build workflows with the new Visual Studio workflow designer. Learn about text-based authoring options for WF. Hear how WF integrates well with other Microsoft technologies (WCF, WPF, ASP.NET). If you’ve looked at WF before, come and see the changes to data flow, composition, and new control flow styles. Significant improvements to usability, composability, and performance make Workflow a great fit for a broad range of solutions on both the client and the server.
Other great (and related) talks include Doug Purdy‘s Lap Around Oslo, Matt‘s Building WF Activities session, and Ed‘s chocolate & peanut butter talk on WCF+WF.
41 days and counting…
Lark (Seattle, WA)
Rating:
I’ve been meaning to go to Lark for over a year now. However, they don’t take reservations and the wait is usually 40-60+ minutes for a table. Last night, Lauren and I were looking for a nice place to celebrate our 5 year frog-iversary (long story). So we made another attempt at Lark and got seated immediately!
Lark has seasonal menus and centers around small plates (though most of the plates are far from small, more like a large appetizer or a medium sized entree). Inside is a rustic setting that is clean and relaxed. The staff are extremely nice and our waitress was very helpful in helping us choose from the extensive menu of tasty selections.
We started with a glass of Gruner Veltliner and the carrots with carmelized ginger and chervil. The carrots retained a perfect amount of crunchiness and the glaze of ginger enhanced the carrots’ natural flavors. The chervil (a.k.a. fancy schmancy parseley) garnish provided a hint of the garden and was a delightful pairing.
Next up was baby octopus with lobster cream risotto. The octopus was grilled and (if you can distance yourself from the visual of eating an entire octopus including its head) very tasty. It was buttery and charred from the grill, and mixed with lemon thyme and mint. The risotto was creamy and cooked well, but the octopus and herbs were the highlight here.
We then had the seared Sonoma foie gras on wild rice with corn, almonds and cherries. Well executed preparation — crunchy wild rice and creamy foie gras.There’s only a "small plate" worth of foie gras, with lots of wild rice to soak up the juices.
Our main dish was the chicken with green beans, watermelon, and pickled bits. I’m always a little skeptical of ordering chicken, but the waitress assured us that it was moist and spectacular. Indeed, it was the best chicken I’ve had in awhile and I would happily order it again.
We were pretty full at this point, but after one look at the dessert menu we had to make a little more room 🙂
We concluded with a nectarine tartlette with vanilla ice cream. The puff pastry was a little thicker than I prefer, but the nectarines were fresh, the ice cream was creamy, and it was an enjoyable conclusion to the meal.
Overall we had a fantastic meal at Lark with amazing service. I’m looking forward to my next meal and to experiencing different parts of the menu!
Lark
926 12th Ave (between Spring and Marion)
Seattle, WA 98122
206-323-5275
Tue-Sun: 5:00PM-10:30PM (Dinner)
Paseo (Seattle, WA)
Rating:
The other day, Lauren pointed me to a slog post about Via Tribunali’s expansion (hopefully their product won’t degrade). I followed the link of the other restaurant listed in the post, and a few days after reading the gushing reviews we found ourselves waiting in line in front of a non-descript hole-in-the-wall across from Eyes on Fremont.
Paseo is a no-frills shop for fantastic Caribbean food. They serve a variety of sandwiches, salads, and plates (deconstructed versions of the sandwiches with rice & beans). There are a handful of tables inside, plus a few more outdoors on sunny days like today.
#3 is the grilled chicken sandwich. It was awesome. Lauren’s reaction was: "This is the best chicken sandwich I’ve ever had!"
If you have a vegetarian with you, they will love the tofu sandwich (though I’ve got to say, the meat is superior). Paseo offers a spicy level (1-5) for the tofu sandwich. We ordered it "3", but it wasn’t that spicy and next time I would order a "5" spice. All the sandwiches come with corn on the cob, lathered in butter and garlicky goodness.
All in all, Paseo delivered great sandwiches that I will crave for awhile!
UPDATE (10/4/2008): Tried the chicken salad today and it was also great. For those wanting something a little lighter (or if you’re anti-bread for some reason), the salad has pickled beets, a tart vinaigrette, and juicy marinated chicken.
Paseo
4225 Fremont Ave N
Seattle, WA 98103
206-545-7440
Tue-Sat: 11:00AM-9:00PM (Lunch and Dinner)
22 Doors (Seattle, WA)
Rating:
When 22 Doors first opened, it was a delight. Friendly staff with inventive and tasty food. Brunch was a hit with their sweet potato pancakes and crab melt croissants. Dinner had delectable fish, great pastas, a great burger, and an awesome grilled cheese with tomato soup. The food was more expensive then your typical bar, but so was the quality (and it was well worth it).
Unfortunately, since last summer the food and service have steadily declined. I want to still like 22 Doors, I really do. They are located a stone’s throw from my backyard. But their new chef is uninspired, and their servers are forgetful and perpetually understaffed. While the decor hasn’t changed, the dining experience is now an overpriced disappointment.
Last night we had their "Mediterranean feast", which is a plate of hummus with pita, cucumbers, tomatoes, and olives. The hummus had a ton of tahini, but was decent enough and the vegetables were crisp and fresh (though it shouldn’t have taken over 30 min to arrive). On to the main course. I used to unequivocally recommend their burger. The last time I had it was a letdown, but it was during brunch and I chalked it up to the Sunday brunch chef not having a clue. Alas, really it’s just that the burger is now just a $12 ho-hum burger. Time for me to find a new quality burger on the hill.
Overall 22 Doors is way too expensive for what you get on the dining front. But they do have a nice patio, and a warm fireplace in the winter that make it a good drink stop on 15th.
22 Doors
405 15th Avenue E (between Harrison and Republican)
Seattle, WA 98112
206-324-6406
Daily: 5:00PM-2:00AM (Dinner)
Sat-Sun: 10:00AM-3:00PM (Brunch)
Asynchronicity, OneWay, and WCF
I’ve recently encountered some confusion around the behavior of one-way operations in WCF that I’m going to try and clear up. In particular, developers are under the impression that a one-way operation == a non-blocking call. However, this is not necessarily the case. A one-way operation means that we will call the underlying channel in a "one-way manner". For IOutputChannel/IDuplexChannel, this maps to channel.Send(). For IRequestChannel this maps to channel.SendRequest() followed by a check for a null response.
Now, sometimes the underlying channel can complete immediately (UDP will drop the packet if the network is saturated, TCP may copy bytes into a kernel buffer if there’s room, etc). However, depending on the amount of data transmitted and the number of simultaneous calls to a proxy, you will often see blocking behavior. HTTP, TCP, and Pipes all have throttling built into their network protocols.
If this isn’t desirable, there are a few alternatives depending on your application design. First off, if you want a truly non-blocking call, you should call channel.BeginSend/client.BeginXXXX (i.e. generate an async proxy). This is step one if you want non-blocking calls. With an asynchronous proxy, we will always be non-blocking from a thread perspective (which is always my recommendation for middle tier solutions, though there’s some quota coordination necessary to avoid flooding outgoing sockets).
For one-way operations, when your async callback is signaled it means that the channel stack has "successfully put the message on the wire". When this happens depends on your channel stack:
- TCP signals when the socket.[Begin]Send() of the serialized message has completed (either because it’s been buffered by the kernel or put onto the NIC)
- Pipes are a similar process (NT Named Pipes work similarly to TCP under the covers but without the packet loss)
- MSMQ signals when the Message has been transferred successfully to the queue manager
- HTTP signals when we’ve received an empty response. The only other alternative would be to remove all guarantees (and have to arbitrarily propagate the exception through some other call or thread). Trust me, this is better
- UDP will complete when the UDP socket send completes (which is effectively instantaneous)
For two-way operations, when your async callback is signaled it means that the channel stack has "successfully put the message on the wire and then received a correlated response".
Asynchronous operations can be tricky, and can often get you into flooding trouble when used incorrectly. So be careful, use quotas to manage your flow control, and always remember that the internet is not a big truck; it is a series of tubes and sometimes they get clogged. And you shouldn’t try to fight the clogs by pouring more data down the tubes 🙂
Molly Moon's Ice Cream (Seattle, WA)
Rating:
It’s summertime, which in Seattle means post-9PM sunsets, and temperatures that finally break 70 degrees. Perfect time of year to try out the new ice cream haunts around town.
This afternoon my friends from Greenlake introduced me to Molly Moon’s ice cream shop in Wallingford. It’s right on the main drag near Bottleworks and the big QFC. Molly Moon opened in May and is all about local ingredients (mostly organic), compostable bowls/flatware, and creative flavors.
With a group of 3, I was able to sample 6 of their 16 flavors: honey lavender, thai iced tea, balsamic strawberry, salted caramel, "scout" mint (they added the quotes, not me), and chocolate. They all had a good texture (medium-creamy), and all of them tasted as advertised, but most of the flavors were too overwhelming. These are ice creams that don’t hold back. Thai iced tea was effectively a solidified version of the condensed milk cocktail. The salted caramel was jam-packed with salt and caramel, and while I really enjoyed it, I could only handle a few bites. Molly is at her best on the basics – the chocolate and strawberry were my favorites of the bunch.
If you’re in the area, Molly Moon’s is a friendly place to stop on a warm day and grab an ice cream and/or an espresso (with Vivace beans). I’m glad to see a real ice-cream shop opening as opposed to the set of recent Pinkberry-knockoffs. And if Molly can adapt her recipes to a more subtle, nuanced approach then this shop can become a standout.
My apologies for the lack of pictures. My lovely photographer was out of town this weekend.
Molly Moon’s Homemade Ice Cream Shop
1622 1/2 N 45th Street
Seattle, WA 98103
206-547-5105
Daily: noon-11:00PM
P.S. They are working on getting pints into local grocery stores as well, stay tuned.
Mondo Gelato (Vancouver, BC)
Rating:
We were in Vancouver this weekend to celebrate Kara’s birthday. When I come to Vancouver, we often have crepes and we usually have sushi. But I always make sure that we stop by Mondo Gelato at least once per visit. They have over a hundred good-looking flavors…
We ordered a small cup (2 scoops) with Dark Chocolate and Indian Mango. They had a delectable, creamy texture. I love darker chocolates and Mondo’s fit that bill without being too bitter (it was similar to, though slightly darker than, the chocolate gelato at Vios). It paired well with the Indian Mango, which brought back memories of beach-side fresh fruit in Vietnam.
Next time you find yourself in Vancouver (or San Diego, Hawaii, or Beijing it turns out), stop by Mondo and get yourself a taste of Italy!
Mondo Gelato
1222 Robson Street
Vancouver, British Columbia
Canada V6E 1C1
604-694-0108
Fun fact: gelato (at least at Mondo) has 25% less calories than sorbetto (and only 10% more than their frozen yogurt)
WF/WCF July MSDN Webcasts
Starting last month, MSDN put together a regular series of webcasts on WCF and WF (focusing on .Net 3.5). Here are the talks being broadcast in July:
July 7th, 10:00AM (PST)
Transactional Windows Communication Foundation Services with Juval Lowy
July 9th, 10:00AM (PST)
Using Windows Workflow Foundation to Build Services with Jon Flanders
July 11th, 10:00AM (PST)
WCF Extensibility Deep Dive with Jesus Rodriguez
July 18th, 10:00AM (PST)
SharePoint Server and WCF with Joe Klug