Nicholas Allen's Indigo Blog

Windows Communication Foundation From the Inside

Browse by Tags

Tagged Content List
  • Blog Post: Channel Development Survey

    The WCF channels team has posted a short survey on channel development to collect some of your feedback about what to work on after .Net 4 is released. You can help them out if you've previously written or tried to write a layered channel, transport channel, or message encoder. The survey should only...
  • Blog Post: Parsing Standard Uris, Part 2

    Here's another look at defining what it means to have a URI for the TCP or named pipe transports. You can compare these definitions to the version I gave yesterday using the parser syntax flags. I'll only cover the net.tcp URI scheme as the two are almost identical except for the use of ports. What...
  • Blog Post: Parsing Standard Uris

    The System.Uri class has built-in parsing rules for a variety of schemes, including http, https, file, ftp, gopher, mailto, news, nntp, telnet, and ldap. There are also parsers for the WCF net.tcp and net.pipe schemes. These parsing rules allow a uri using the scheme to be recognized, broken into its...
  • Blog Post: Finding the Remote Client Address

    After being a highly-requested feature, back in .Net 3.5 we added the ability to see the network address from which the client request had arrived. Here's how it works. Participating transports capture the client's network address using whatever sources of information they have available. The transport...
  • Blog Post: Fix for Error Accessing Remote Endpoint Address

    The Windows networking team has released a fix for accessing the remote endpoint address of a socket that may affect WCF users. When an asynchronous call is made to a thread working with the socket, and the thread exits before the asynchronous call is processed, the wrong remote endpoint address might...
  • Blog Post: Three Networking Questions Answered with Samples

    How do I remove or change the framing headers used for a TCP connection? By writing a transport channel you can control exactly what information is read or written to the TCP socket. An example of doing this is in the WSE interoperability sample . How do I pass credentials from the client to...
  • Blog Post: Some History of the Named Pipe, Part 4

    Here are the past articles in the series to get up to date: Some History of the Named Pipe, Part 1 (Unix pipes) Some History of the Named Pipe, Part 2 (Unix fifo) Some History of the Named Pipe, Part 3 (Windows named pipe) The last part in this series is to bring the history of the...
  • Blog Post: Finding Free Ports, Part 2

    Yesterday I talked about the algorithm the TCP transport uses to reserve a unique port when listening on both IPv4 and IPv6 addreses is enabled for a service. Why are the random port numbers drawn from the range 49152-65535? Because that’s the range the operating system uses for dynamic port allocations...
  • Blog Post: Finding Free Ports

    One of the options for the listen URI for the TCP transport is to let the transport make the address unique by filling in details such as the port number. The socket API allows specifying a wildcard port but at the time WCF was written the wildcard port option could only be used with a single IP version...
  • Blog Post: Top Down Binding Element Order

    Why does a message encoder have to be specified before the transport when constructing a binding? A message encoder doesn’t directly fit into a channel stack because the message encoder type doesn’t implement any of the channel shapes. Instead, a message encoder is an auxilliary piece used by one...
  • Blog Post: Just Exactly What You Asked For

    When implementing a transport or layered channel class the marker used to indicate that your class is a channel is to implement the IChannel interface. Therefore, all channels will implement one of the known channel shapes: IInputChannel, IOutputChannel, IDuplexChannel, IRequestChannel, or IReplyChannel...
  • 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: 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: Advanced Windows Debugging

    Channel 9 has put up a new video that mostly plugs the Advanced Windows Debugging book by Mario Hewardt and Daniel Pravat. I recommend the book for someone that needs to debug difficult issues dealing with native resources. For most people working with WCF this is never really a concern, but custom transport...
  • Blog Post: Building with Encoders

    The basis of a channel stack is that there is a series of objects that share a common interface for communication. This leaves message encoders with something of a problem as the primitive operations for encoding and decoding messages are different than the primitive operations for sending and receiving...
  • Blog Post: TIBCO Announces WCF Integration

    At their user conference in San Francisco yesterday, TIBCO announced two integration initiatives to bring the TIBCO and Microsoft platforms closer together. TIBCO is developing a TIBCO EMS transport channel for WCF. Although Microsoft doesn't have a formal certification process for releasing third...
  • Blog Post: The Pipe DACL

    When a named pipe channel listener creates a new named pipe it has to supply a discretionary ACL that describes who can connect to the pipe. Here is how that DACL is constructed: An access control entry is added to deny GENERIC_ALL access to the well-known network SID (S-1-5-2). Access control...
  • Blog Post: Mapping Credentials to Authentication Schemes

    You may have noticed that an HTTP binding is configured with an HttpClientCredentialType whereas an HTTP binding element is configured with an AuthenticationScheme. How are these two settings related? If you want to switch between a custom binding and a standard binding for HTTP, then you need to know...
  • Blog Post: Controlling HTTP Connection Limits

    I need to make many simultaneous HTTP calls to the same service from my client application. How do I increase the limit on the number of HTTP connections? This setting isn't available on any of the bindings or binding elements but the default limit can be set through the DefaultConnectionLimit property...
  • Blog Post: Concurrent Channel Performance

    Being thread-safe is different than being concurrent. The channel interfaces are thread-safe so that multiple callers can use them at the same time without getting garbled messages. However, if multiple callers try to send messages on a single channel at the same time then a few different things might...
  • Blog Post: Always Begin with Accept

    Inside a service, there's a fundamental loop running whose job it is to create channels for the incoming connections to the service. There's another loop that runs later, which you may argue is equally fundamental, that reads messages from each channel to determine the actual service invocation. Every...
  • Blog Post: Creating Sessions over HTTP

    I've got a sessionful contract that I want to use with HTTP. How do I get the HTTP transport to produce a sessionful channel shape? The basic design principle of channels is that they produce whatever channel shape is their natural message exchange pattern. For HTTP, the natural message exchange...
  • Blog Post: Adding HTTP Headers

    Why doesn't anything happen when I try to add HTTP headers from a message encoder? The problem here is a basic issue of timing. Recall the interface contract that a message encoder has with its transport. The transport receives a message from the next channel up in the channel stack, does some processing...
  • Blog Post: Interfaces for GetProperty, Part 1

    This is more of a reference than anything else. People have asked me what interfaces do something when used with GetProperty on a binding element. Of course, a custom implementation can do whatever it wishes in its GetProperty, so I can only tell you what the standard implementations have done. Also...
Page 1 of 4 (76 items) 1234