>
 Friday, April 25, 2008

Here is my usual post-conference post with updated code samples related to the topics I presented on. I did 2 full day tutorials, and 4 sessions...enjoy!

Many of the demos come from my book, Learning WCF. Since there is setup required for most of the samples that illustrate security or rely on a database, it is best you download the entire package of samples and follow the setup instructions provided in the appendix. Here's the link: http://www.thatindigogirl.com/LearningWCFCode.aspx

TUTORIAL: Improve Your SOA: Designing a Secure, Reliable and Scalable System with WCF

TUTORIAL: .NET Roadmap

SESSION: ADFS and ASP.NET: Supporting Single Sign-On in your Web Applications

SESSION: Building a Router for your Applications

SESSION: Going Federated with WCF

SESSION: Load Balancing Considerations for WCF

    • Samples for this instancing and throttling come from my book (see above).
    • I have additional samples related to proxies here, including a proxy wrapper to address timeouts and uncaught exceptions that fault the channel: http://www.dasblonde.net/downloads/Proxies.zip
Technorati Tags: , , ,
4/25/2008 1:38 AM AD FS | Security | WCF  | Comments [4]  |  View reactions  |  Trackback
 Thursday, April 24, 2008

A few weeks ago I was presenting a code sample that I created last year and discovered a mysterious problem.

First, let me explain the sample. It is a proxy wrapper for WCF clients that illustrates how to swallow timeout exceptions and recreate channels automatically when there is an exception that faults the channel. The idea is this:

  • When a channel with a transport session times out, does the user need to see an error? Not really. But, the exception won't show up until you try to call the service, so my wrapper catches communication exceptions and if they are not faults it creates a new channel and retries the same call to the service once more. The theory is, if it fails again, we probably have a bigger problem. Otherwise, we will have successfully allowed the client to continue working without seeing an error.
  • When an uncaught exception from the service faults the channel, the client channel will also be faulted if the call is not one-way. The user should see the error message, even if it is an uncaught exception, but the next time they use the proxy they should get a new channel so they can continue to work. So, the proxy wrapper creates the channel again if the channel is faulted, before making the next call.

I explained this in my ASP.NET Pro article on the subject. The latest code for this is here: http://www.dasblonde.net/downloads/Proxies.zip

Well, the problem that In encountered is that all of a sudden my logic for checking if the channel was faulted after a timeout, was failing!!!! It was strange - from one stack frame to another, the channel went from Faulted to Created. But none of my code affected that change! So, of course I thought that something had changed in .NET 3.5 related to channel factory caching that might have had a side-effect of my code...and I didn't have time to investigate further until today while I was talking with my colleague Brian Noyes about the subject.

Long story short, he ran the code, reproduced the problem, and remembered that there were some strange behaviors with SUO files for a solution that could cause this. He deleted the SUO and then the sample worked like it originally did!!!!! I did the same, and found the same result.

This is really messed up! Apparently this is a common problem, but I have never heard about it before. The real annoyance is the time I spent troubleshooting this before I talked to Brian, and the doubts it put in my mind about new features of WCF and possible regressions....and yet I was wrong...it was the stupid SUO file. What the? Holy? This is an unacceptable bug. Who knows what kind of misleading issues this could cause developers in their day-to-day work.

Technorati Tags: ,
4/24/2008 11:36 PM VS 2008 | WCF  | Comments [4]  |  View reactions  |  Trackback
 Wednesday, April 09, 2008

P&P is putting together guidance for WCF security and is looking for feedback from the community. Now is the time to influence the results from your own practical experience so get in there and review the whole thing or the areas of your greatest interest over the next few weeks! The feedback will be really useful!

J.D. Meier's blog has a link here:

http://blogs.msdn.com/jmeier/archive/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx

Or, go direct to the CodePlex site:

http://www.codeplex.com/WCFSecurity/

Technorati Tags: ,
4/9/2008 8:21 PM Security | WCF  | Comments [0]  |  View reactions  |  Trackback
 Wednesday, November 14, 2007

Thanks to all that attended the full-day tutorial at Dev Connections last Monday - Improve Your SOA: Designing a Secure, Reliable and Scalable System. It was certainly an avalanche of rich topics related to SOA and WCF. At last I have compiled the long list of resources from the day, including references to some getting started resources for those new to WCF.

Getting Started

Demos

Code from the book is organized by subject matter. I specifically illustrates samples from these subdirectories: \Exceptions, \Security, \Security\ClaimsBased, \Instancing, \Concurrency, \Bindings, \QueuedMessages, \Transactions, \ReliableSessions.

If there are other resources you are looking for specifically, please drop me an email and I'll add to this post. Thanks!

Technorati Tags: , ,
11/14/2007 2:58 AM DevConnections | Speaking/Events | WCF  | Comments [9]  |  View reactions  |  Trackback
 Monday, October 22, 2007

Thank you very much for attending the presentation last night, I enjoyed all the great questions and discussion, and as promised here is a link to the slides, and resources for the presentation.

Get the slides here.

Get the code samples from my .NET Roadshow presentations on security, and this includes the federation samples, here: http://www.dasblonde.net/2007/09/15/NET35RoadshowSampleCode.aspx

Enjoy!

Technorati Tags: ,
10/22/2007 4:20 AM Security | Speaking/Events | WCF  | Comments [0]  |  View reactions  |  Trackback
 Saturday, September 15, 2007

As some of you may know, several of us at IDesign (Juval, Brian and myself) are in the midst of a two-week .NET 3.5 Roadshow - six cities in two weeks where we collectively cover WCF, WF, WPF, CardSpace, federated and claims-based security concepts, and some key aspects of .NET 3.5 such as new C# 3.0 language features and ADO.NET 3.5 including LINQ and the Entity Framework.

I'm personally covering WCF security, federated and claims-based security, C# 3.0 and ADO.NET 3.5. For those of you attending (or, not) here are links to the code samples I'm presenting:

VS 2005 samples

Download VS 2008 Samples (UPDATED 10/11/07)

This download includes all samples referenced above, in addition to .NET 3.5 samples for C# 3.0 and LINQ, and IDesign's declarative security model including a recent version of our ServiceModelEx library.  

Other relevant resources discussed:

Any questions? Email me.

-Michele

Technorati Tags: , , ,
9/15/2007 7:15 AM .NET 3.5 | CardSpace | Security | WCF  | Comments [5]  |  View reactions  |  Trackback
 Wednesday, August 22, 2007

I have recently made a series of posts describing changes to VS 2008 templates for WCF as compared to VS 2005 + Orcas extensions. See

Technorati Tags: ,

the post here: http://www.thatindigogirl.com/VS2008Beta2ProjectTemplatesForWCF.aspx

8/22/2007 7:54 PM VS 2008 | WCF  | Comments [3]  |  View reactions  |  Trackback
 Thursday, August 16, 2007

Today I completed a webcast as part of a 15 part series - today's subject concurrency, throughput and throttling. I received some questions about callback and Windows client applications that I thought I would elaborate on here. In fact, I went a little overboard and created a bunch of samples that would illustrate the behavior of services and clients when you have a Windows client, a service with a callback contract (thus, two-way communication) and various WCF settings at the client and service that relate to concurrency, multithreading, synchronization with the UI thread, and so on.

The following table summarizes various settings at the client, service and callback and the resulting behavior at runtime. Here's the breakdown for each column:

  • Callback Sync Context - refers to the UseSynchronizationContext setting for the CallbackBehaviorAttribute on the client callback object.
  • Callback Concurrency Mode - refers to the ConcurrencyMode setting for the CallbackBehaviorAttribute on the client callback object.
  • Service Operation - Indicates if the service contract operations are one-way or two-way.
  • Callback Operation - Indicates if the callback contract operations are one-way or two-way.
  • Service Concurrency Mode - refers to the ConcurrencyMode setting for the ServiceBehaviorAttribute on the service type.
  • Resulting Behavior - when the corresponding sample is run, what happens?

I have also uploaded sample code for each of these scenarios, numbered in order of table row description below. Get the code here.

Callback Sync

Context

Callback Concurrency Mode

Service Operation

Callback Operation

Service Concurrency Mode

Resulting Behavior

True/

False

Single/

Reentrant/

Multiple

One-way/

Two-way

Two-way

Single

These are defaults. InvalidOperationException at the service. Operation would deadlock calling the client application since the callback is two-way and reentrancy isn’t possible.

True

Single/

Reentrant/

Multiple

Two-way

Two-way

Reentrant/

Multiple

Service able to call client, but client is blocked because of outgoing call.

False

Single/

Reentrant/

Multiple

Two-way

Two-way

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. If client callback object tries to communicate with UI thread (i.e., setting properties of controls) it will block.

False

Single

One-way

Two-way

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. Client callback object can communicate with UI thread using Invoke() from callback thread. Client can issue multiple calls to service but only one callback can be processed at a time.

False

Multiple

One-way

Two-way

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. Client callback object can communicate with UI thread using Invoke() from callback thread. Client can issue multiple calls and multiple callbacks can be processed at a time.

False

Multiple

One-way

One-way

Single/

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. Client callback object can communicate with UI thread using Invoke() from callback thread. Client can issue multiple calls and multiple callbacks can be processed at a time.

False

Multiple

Two-way/

Multi-threaded Client

 

Two-way

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. Client callback object can communicate with UI thread using Invoke() from callback thread. Multiple calls from client can be processed at the service, and multiple callbacks can be processed at the client.

False

Multiple

Two-way/

Multi-threaded Client

Two-way

Reentrant/

Multiple

Service able to call client, client callback object is not blocked. Client callback can communicate with UI thread using Invoke() from callback thread. Multiple calls from client can be processed at the service, and multiple callbacks can be processed at the client.

Here is a summary of considerations.

  • Contract design:
    • Make callback operations one-way. If this isn’t possible, make the service reentrant. Prefer one-way callbacks since most likely the service doesn’t care about responses.
    • If service operations will notify clients with a callback, make them one-way as well.
  • Exception handling:
    • Remember that uncaught exceptions invalidate service, client and callback channels where sessions are involved. Two-way communication can only happen over duplex, thus there is a transport session (TCP, named pipes) or HTTP session (using reliable sessions over WSDualHttpBinding). 
    • Throw faults for known exceptions unless you want the client to be forced to recreate the proxy and start a new session. That includes clients – who should not allow exceptions to flow back to the service during a callback unless they intend to destroy the session.
    • To avoid destroying the session: if callback operations are one-way, swallow the exception after handling it at the client; if callback operations are two-way, report a fault to the service in response.
  • Windows client issues:
    • Always disable synchronization with the UI thread for callback objects, by setting UseSynchronizationContext to false in the CallbackBehaviorAttribute. 
    • Multithreaded clients should invoke services on another thread (can use asynchronous proxies) when callbacks or long running service operations are involved. This prevents UI thread from blocking during call, allows callbacks to communicate freely with UI.
    • Use Invoke() to communicate with UI from the callback thread. 
    • Don’t forget to protect other client state if the callback object supports multiple concurrent callbacks. That means the ConcurrencyMode setting is Multiple in the CallbackBehaviorAttribute.
Technorati Tags: , ,
8/16/2007 1:20 AM .NET 3.0 | WCF  | Comments [5]  |  View reactions  |  Trackback
 Monday, April 02, 2007

Once again a fantastic conference in Orlando. Dev Connections just keeps getting better and I always enjoy being part of it. Not to mention the weather in Orlando isn't bad!

Here are links to my code samples for each talk I delivered. Enjoy!

.NET Technology Roadmap Tutorial

ASP.NET and WCF

ASP.NET and CardSpace

WCF Federated Security

 WCF Contracts and Versioning

ASP.NET Performance (Updated 06/07/2007)

Ok people, I had this in my Windows Live Writer to send a long time ago, and somehow it did not post...but since I haven't posted in a while I didn't notice. Many apologies for the delay. Does the "better late than never" statement apply here? I hope so...

 

4/2/2007 3:32 PM ASP.NET | CardSpace | Speaking/Events | WCF  | Comments [12]  |  View reactions  |  Trackback
 Friday, March 23, 2007

I just spent the last week at SD West in San Jose...this year the conference was bigger than ever before! Thanks to everone that attended my tutorials and sessions, I really enjoyed the questions and discussions...as I hope you did. As promised, here is a list of all my resources from the conference talks. Enjoy!

 

Intro to Web Services (Tutorial)

  • Christian Gross and myself presented this one, discussing everything from POX, REST, RSS, SOAP/WSDL, WS* and SOA.
  • Code I demonstrated in this tutorial is from the .NET Web Services tutorial next.

.NET Web Services TODAY (Tutorial)

Microsoft Technology Avalanche (Tutorial)

Top 10 Web Service Standards You Need To Know

WCF Contracts and Versioning

  • Demonstrations in both of these talks are based on WCF code from my book here: http://www.thatindigogirl.com/LearningWCFCode.aspx
  • See \Security, \ReliableSessions, \Transactions in particular for the WS* discussion
  • See \DataContracts, \AdvancedSerialization, and \ServiceContracts for the contracts discussion

CardSpace

The Amazing World of Federated Security

3/23/2007 8:57 PM .NET | Speaking/Events | WCF | Web Services  | Comments [25]  |  View reactions  |  Trackback

I created a presentation in November of last year with the goal of helping folks make sense of the vast number of Microsoft technologies from development tools, language, data, windows, web and SOA development. This blog post holds the latest links to resources and code for each section.

System Requirements

The links below use the following technology platforms: