Nicholas Allen's Indigo Blog

Windows Communication Foundation From the Inside

Browse by Tags

Tagged Content List
  • Blog Post: Ignoring MustUnderstand

    How can I configure a client or server to handle messages even if a required header isn't understood? The SOAP mustUnderstand attribute on a header is used to indicate that processing the header is required in order to properly handle the message. If the header can't be processed, then a fault is...
  • Blog Post: Untyped Asynchronous Calls

    How do I asynchronously call a service operation without having a typed service contract on the client? An untyped contract is one where there is a single input or output parameter of type Message. Using the Message class rather than strong types allows you to reuse the same contract for any arbitrary...
  • Blog Post: Customizing Parameter Names

    Why does changing the name of a parameter in a service contract break compatibility with existing clients? Each named part of the message that appears in metadata or as part of the wire protocol needs to come up with a name from somewhere. We don't have any better default name for parameters...
  • Blog Post: Don't Check What Doesn't Have to be Correct

    I'm trying to validate the structure of messages against schema but there are SOAP headers that I don't recognize. How do I check that these headers are correct? SOAP headers already have a mechanism for saying whether you are required to deal with that header. The mustUnderstand attribute with a...
  • Blog Post: Order Best Practices

    Why is setting the Order property on data members recommended when adding fields in a new version of the contract? The data contract versioning best practices recommend taking three steps when adding fields in a new version of a contract. The first recommendation is to set the IsRequired property...
  • Blog Post: Nothing to See Here

    What is the System.ServiceModel.Channels.NullMessage used for? The Message class is a central abstraction for representing communication between two endpoints. There's often interesting information associated with a message, such as the message delivery properties, and that interesting information...
  • Blog Post: Levels of Tracing, Part 6

    The last article in the levels of tracing series covers the logging of messages at the transport level. Transport level logging generally occurs in the message encoder as that is where the message bytes are actually processed but in some rare cases there are times when the transport sends messages without...
  • Blog Post: Levels of Tracing, Part 5

    Last time I talked about the four switches that control which types of messages get logged: logEntireMessage: whether to log message bodies or just the headers of each message logMalformedMessages: whether to log the message when there is a decoding error, such as in a message encoder or serializer...
  • Blog Post: Levels of Tracing, Part 4

    Today's article continues the series on tracing and message logging with a look at the different message logging configuration options. Introduction to tracing and trace levels Configuration tracing and trace options Enabling message logging The options I showed yesterday for message...
  • Blog Post: Levels of Tracing, Part 3

    Although often associated with event tracing, message logging is actually a separate facility from the standard levels of tracing. Message logging is not enabled by default just like event tracing is not enabled by default. You activate message logging by adding a trace source and listener to the configuration...
  • Blog Post: Levels of Tracing, Part 2

    Continuing from last time where I talked about the different levels of tracing, today covers how to configure trace sources for a particular level and when each trace level should be used. A simple configuration for tracing combines a trace source with an inline specification of some trace listeners...
  • Blog Post: Levels of Tracing, Part 1

    Tracing is a mechanism for collecting error information and other processing milestones from across multiple components within an application. Tracing is generally not enabled by default. Rather, you have to elect through application configuration or coding to receive trace events from one or more trace...
  • Blog Post: Securing Custom Headers, Version 3

    How do I configure a client to sign or encrypt message headers that are generated dynamically at runtime? The client uses the same ChannelProtectionRequirements mechanism to specify the protection of message headers as the service does. Your intuition may be flipped though as Incoming message parts...
  • Blog Post: Fault Serialization with XmlSerializer

    About 20 posts ago, back before PDC, this was the next topic in the queue to be posted. It has been somewhat delayed by all of the talk of product announcements and details about future releases. Since it was becoming lonely and forgotten I thought I'd get back onto talking about the product that you...
  • Blog Post: Non-Destructive Queue Receive State Machine

    The state machine for a non-destructive receive has some noticeable similarities to the state machine for a general-purpose communication object, but it's intentional for these two state machines to be different. A non-destructive receive tries with minimal overhead to provide support for at-least once...
  • Blog Post: Non-Destructive Queue Receive

    You should take the time to understand the earlier articles in the series for context if you haven't already. Future of Queuing An Alternative Queuing Model The three basic operations that we talked about for queuing with non-destructive receives are peek, lock, and delete. Rather than...
  • Blog Post: Correlation under the Hood

    You'll probably want to have read the previous articles about correlation for this to make sense. Future of Correlation Future of Correlation Examples Message Filters and Queries Now that you've seen some of the details about message queries, you can combine queries with Ed's demonstration...
  • Blog Post: Message Filters and Queries

    Since a message filter and message query share a similar heritage, let's start by looking at the conceptually simpler message filter APIs. You probably haven't seen message filters before unless you've gone out of your way to explore everything that comes with WCF. They don't appear in the ordinary use...
  • Blog Post: Future of Correlation Examples

    Last time I talked about how WCF 4.0 standardizes many different types of correlations using a query mechanism and promised to go into more detail today. You might already be familiar with the message filter engine in WCF 3.0. If you haven't seen message filters before, then the message filter engine...
  • Blog Post: Future of Correlation

    One of the topics that you'll hear a lot about for asynchronous and decoupled programming in WCF 4.0 is correlation. Correlation is a relationship between one message and another message or one message and a piece of state. With synchronous programming, you may not always think about the correlations...
  • Blog Post: Writers are like Streams

    I recently saw some application code that misused XmlWriter and which happened not to work all the time as a result. What they were doing was using XmlWriter to write to an underlying stream and then flushing that stream without having flushed the writer. Depending on the intervening code and the...
  • Blog Post: Examining Header Values

    I've seen that many people are accessing custom SOAP headers incorrectly. When you get a message with some SOAP headers, it's likely that at some point you will want to know the values of those headers. If the header you want is a well-known kind of header, then you may have direct access to the header...
  • Blog Post: Working with XElement Names

    XElement has a slightly different way of talking about XML than what WCF uses. This can lead to subtle bugs if you're not careful. Everywhere you see XML used in WCF, it is processed using an XmlReader and XmlWriter. These classes allow you to work with XML with extremely high performance but the...
  • Blog Post: Using Faults with Untyped Messages

    When using a typed contract, incoming messages on the server are shredded on your behalf to be turned into method calls and parameters. Ordinarily, the particular method call selected for an application messages will have the same parameterized contract as the message. This allows the transformation...
  • Blog Post: You Are Here

    Inside of a service method, how do I know where the message was delivered? Without defining what distinguishes a location it's hard to explain where 'here' is. I've got a few guesses though based on the most common variations of this question: OperationContext.Current.IncomingMessageHeaders...
Page 1 of 4 (79 items) 1234