This page is likely outdated (last edited on 28 Aug 2009). Visit the new documentation for updated content.


Table of contents

This page is OLD

This page had not been maintained for years, and it has been obsoleted a lot. It will be rewritten with the latest status, with updated milestones to achieve rational milestones and need. Check the new status at WCF Development.

We used to write WCF code in “Olive” module and hence there is a lot of lines that mention it in the following sections. But the WCF module is moved to mcs tree like other class libraries.

Communication Foundation

Olive comprises Windows Communication Foundation (WCF) stack for building SOA-based applications. Its development is in early stages, but you can read Mono Olive: Introducing Windows Communication Foundation notebook for further help on building, fundamentals and contributing (building steps are outdated; please, check mono-olive for further help).

Some of the WS-* specifications that the Communications Foundation uses are available here.

WCF is also used in Moonlight, but it cuts down huge parts of .NET 3.0 features and our implementation in Moonlight should be almost feature complete.

High level status

The following status is gathered based on execution of samples in

The initial goals focus on basicHttpBinding, so the samples were converted to use basicHttpBinding.

Many blocking bugs were fixed in order to achieve an initial status.

At this point almost none of the samples work out of the box.

Each non working sample was analyzed in order to understand the source of the failure.


Serialization features

  • XML Serialization (XmlSerializerFormatAttribute) - supported
  • MTOM not supported
  • DataContract serialization - supported. Tested and works with some simple scenarios. Fails on ICalculatorService and other data contract types. Deserializer creates new instance using reflection instead of GetUninitializedObject so can’t deserialize types that don’t have default constructor.
  • NetDataContract serialization - not supported
  • Incorrect Soap version in untyped messages.
  • ServiceKnownTypes attribute is not supported.

Service contracts

  • Problems with metadata generation.
  • Typed messages not working well.
  • MessageContract - partially supported

Service features

  • Sessions not supported.
  • Aborting requests is not supported.
  • Asynchronous WS not supported.


  • TCP transport not supported.
  • Reliable session not supported.
  • Security token authenticator not supported.


  • Behavior configuration elements not supported.
    • TextMessageEncoding
    • HttpTransport


  • wsHttpBinding not supported. The only working binding is basicHttpBinding.


Milestone 1 - Basic connection establishment - achieved

  • Basic ServiceHost side logic : hacked
  • Connect via HTTP and process messages : hacked
  • Support message from/to service method invocation : hacked
  • Support client native method invocation proxy : hacked
  • Optionally configuration support : hacked

Milestone 2 - Web Services support

The purpose of this milestone is to achieve roughly fully functional WCF API, although many of the new WCF features will not be working. Our hopes are that after achieving this milestone, many WCF applications will be able to run by modifying the configuration files to remove those unsupported features.

In order to achieve this milestone we need to support the following:

  • Binding
    • BasicHttpBinding without security, things to take into considerations:
      • ASP.NET integration - which is currently is partially implemented and:
        1. Has a bug with loading configuration from web.config.
        2. The handler is not integrated into System.Web.
      • Not supporting Security which includes: HTTPS & AuthenticationScheme.
      • Support Only TextMessageEncoder (Without the MTOM Encoder).
      • Support Configuration Properties:
        1. AllowCookies
        2. BypassProxyOnLocal
        3. HostNameComparisonMode
        4. MaxBufferPoolSize
        5. MaxBufferSize
        6. MaxReceivedMessageSize
        7. MessageEncoding
        8. ProxyAddress
        9. ReaderQuotas
        10. TextEncoding
        11. EnvelopeVersion
        12. TransferMode
        13. UseDefaultWebProxy
  • Contracts
    • Support the MessageContract
    • Support the DataContractSerializer.
  • Encoders
    • Support the TextEncoder
  • Behaviors
    • Support the MetadataBehavior
  • Client
    • Develop the GH Proxy
  • Configuration
    • Complete the Configuration Infrastructure (without applying the configuration to the runtime objects)
    • Achive ability to configure the above supported elements through configuration file.

Milestone 3 - WS-Security and all relevant stuff

  • MessageProperty support (HttpRequest-, Security- etc): partly
  • MessageBuffer implementation for its internal use: done
  • xmlenc/xmldsig support for WSS: done, based on Sys.Security.dll
  • basic X509SecurityToken based communication: done
  • basic WSSecurityTokenSerializer support: done
  • support asymmetric binding elements: done
  • support symmetric binding elements: done
  • Timestamp support: done
  • token authentication: only at recipient (though it would be enough so far)
  • handle supporting tokens: done
  • retrieve correct tokens and use correct parameters
  • DetectReplays support
  • key derivation support: done
  • WS-SecureConversation support: it includes
  • SecureConversationSecurityTokenParameters
  • SecurityContextSecurityToken : largely done.
  • SslSecurityTokenParameters: it includes
  • connection-based token retrieval: largely done
  • SSL token processing : largely done
  • Binary XmlDictionary reader/writer for dnse:Cookie
  • SAML implementation
  • IssuedSecurityTokenProvider : it includes
    • analysis on its behavior: largely done
    • WS-Trust request processing (especially at service side)
  • ServiceAuthorizationManager implementation

Milestone 4 - Infocard implementation

  • infocard selector/manager GUI
  • System.IdentityModel.Selectors.dll to invoke infocard.exe.
  • sts.exe

Milestone 5 - everything else

  • some of Filter and FilterTables
  • NetTcpBinding
  • NetPeerTcpBinding
  • NetNamedPipeBinding
  • P2P
  • Transactions
  • SAML support
  • XmlSerializer in Messages
  • InstanceContext
  • Duplex channels and client base.
  • Sessions
  • Behaviors : some are done
  • Extensions
  • MetadataResolver
  • Policy[Import Export]Extension implementation

Not on the list

  • Msmq support
  • ComContract support

Detailed Status

Core Compare

The class status for WCF is now included in the <a href=””>class status pages</a>.



Data Contract

DataContract serialization - supported. Tested and works with some simple scenarios. Fails on ICalculatorService and other data contract types

Message Contract

Typed Messages

Not working well.

Using Streams

Service Contract

Proxy Generator

This generator is a runtime generator for creating the proxy type. Mono has an implementation that uses CodDom, which Mainsoft can’t use. (Their solution is probably will be based on Java Dynamic Proxies.)

Policy & Binding

Binding Element Types


Binding Element


Mono Status

Relevant to GH


A binding that supplies a one-way conversion layer




The base of all of the transport binding elements provided

For now, only HttpTransportBindingElement is implemented, probably TcpTransportBindingElement is the next one. for detail see bellow on TransportBindingElements




Represents the binding element that is used when the client must expose an endpoint for the service to send messages back to the client

Not Implemented



Indicate that a custom stream upgrade provider should be used, for example when adding a compression to a text stream

Implemented, Abstract.



Represents the binding element that contains the privacy policy for the WS-Federation binding




used to communicate with a CardSpace Security Token Service that supports the CardSpace profile of WS-Trust

Not Implemented



Supports reliable session between endpoints

Not Implemented



An abstract class that, when implemented, represents a binding element that supports channel SOAP message security

Seems to be implemented as an abstract class



The base of all Encoding Elements such as ‘TextMessageEncodingElement’, used to encode and decode messages between endpoints.

Partially implemented only to get the text encoder work.



Defines the abstract base class for binding elements used to create peer resolver objects

Not Implemented



This element allows you to enable or disable incoming transaction flow in an endpoint’s binding settings, as well as to specify the desired protocol format for incoming transactions

Partially implemented







Binding Element


Mono Status

Relevant to GH




Not Implemented




used to specify an HTTP transport for transmitting messages





used to specify an HTTPS transport for transmitting messages

Not Implemented




used to specify an TCP transport for transmitting messages





Named Pipe transport

Not Implemented

Not relevant




Integration with message queue

Not Implemented

Not relevant



Base of TcpTransportBindingElement

Implemented, Abstract



Binding Element


Mono Status

Relevant to GH


supports channel security using an SSL stream

Not Implemented




Not Implemented

Not relevant


Binding Element


Mono Status

Relevant to GH


Supports public key encryption




Supports shared key encryption




Base class of security elements




Binding Element


Mono Status

Relevant to GH


Binary format




Binary optimized format, Microsoft specific

Not Implemented in System.Runtime.Serialization



Text format








Binding Element


Mono Status

Relevant to GH









Binding Types


Is the only built in binding that has a reasonable status, and can be used to host a service. This binding supports two TransportBindingElements:

  1. HttpTransportBindingElement – This is not fully implelmented, main aspects are:
    1. Stand Alone executable - On the hosting side seems to be implemented with a stand alone http listener, the client seems to be implemented via WebRequest & WebResponse.
    2. IIS hosting - A handler for System.Web is basically implemented, but need to be integrated into ASP.NET, I have seen a bug right now that the configuration is not taken from Web.Config.
  2. HttpsTransportBindingElement – This element is not implemented due to missing implementation of the corresponding IChannelListener.

In addition it supports two MessageEncodingBindingElements

  1. TextMessageEncodingBindingElement – which is supported
  2. MtomMessageEncodingBindingElements – which is missing because of lack of encoder implementation in System.Runtime.Serialization dll.

When security is on this Binding uses the AsymetricSecurityBindingElement using certificate validation (https).


Represents an interoperable binding that supports distributed transactions and secure, reliable sessions Note: The WSHttpBinding implementes a number of WS-* specifications such as:

  • WS-MetadataExchange
  • WS-RelliableMessaging
  • WS-AtomicTransactions
  • WS-Security

These specifications are also implemented and sun project name ‘Tango’, and sun claims to be interoperable with .NET WCF implementation. The existance of the stack in an open source java project may be very helpfull for us.

Current Status: not impelmented


expose WCF Web services through HTTP requests that use “plain old XML” (POX) style messaging instead of SOAP-based messaging


A secure tcp based Binding for peer to peer network application.


A Binding that uses Tcp as the transport layer This binding by default uses the following elements:

  1. TcpTransportBindingElement
  2. BinaryMessageEncodingBindingElement
  3. SymetricSecurityBindingElement


A WS interoperable binding that is used with duplex service contracts.




Service Runtime Behavior

The behaviors controlls the runtime behavior of the service. There are some built in behaviors as detailed bellow, and the user can add custom behavior. A behavior can be achieved either by inheriting from IServiceBehavior interface or by applying the ServiceBehavior attribute to a service contract. If inheriting from IServiceBehavior then applying the behavior to the service is gained by implementing the method:

void IServiceBehavior.ApplyDispatchBehavior ( ServiceDescription description,ServiceHostBase serviceHostBase)

The ServiceBehavior Attribute contains serveral properties that referrs to different behaviors as detailed bellow.

Transaction Behavior

Defines the behavior of the transaction in terms of timeout, isolation and commit policy. This behavior is reached by applying the ServiceBehavior attribute to a service contract, and definning the following properties:

  • TransactionTimeout
  • TransactionIsolationLevel
  • ReleaseServiceInstanceOnTransactionComplete
  • TransactionAutoCompleteOnSessionClose
  • TransactionAutoComplete

Status: Not Implemented

Dispatch Behavior

Concurrency Behavior

This behavior is applied using the ServiceBehaviorAttribute with the ConcurrencyMode enumeration, which controls whether an instance of a service processes messages sequentially or concurrently

  • Single: Each service instance processes one message at a time. This is the default concurrency mode.
  • Multiple: Each service instance processes multiple messages concurrently. The service implementation must be thread-safe to use this concurrency mode.
  • Reentrant: Each service instance processes one message at a time, but accepts reentrant calls. The service only accepts these calls when it is calling out

Status: Not Implemented

Error Behavior

Throttling Behavior

Basically controls how many messages are processed. The configuration parameters are:

  • MaxConcurrentCalls
  • MaxConnections
  • MaxInstances

Status: Not Implemented

Metadata Behavior

This behavior enables/disables MetadataExchange of a service. It achieved by an instance of ‘ServiceMetadataBehavior’ that is applied to a service host.

Status: It seems to be that some work on this exist, but i can’t get a good status here. In practice I could not retrieve the metadata from a mono based service.

Instance Behavior

This behavior specifies how many instances of the service can be run. This behavior is applied by the ServiceBehavior attribute. The options are defined by the InstanceContextMode enumeration:

  • InstanceContextMode.PerSession
  • InstanceContextMode.PerCall
  • InstanceContextMode.Single

Status: Only InstanceContextMode.Single is implemented.

Message Inspection

Parameter Filtering

Message Encoding






Not Implemented



Activation and hosting