This page is likely outdated (last edited on 28 Aug 2009). Visit the new documentation for updated content.
WCFStatusOld
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 http://msdn2.microsoft.com/en-us/library/ms756478.aspx
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.
Features
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.
Channels
- TCP transport not supported.
- Reliable session not supported.
- Security token authenticator not supported.
Configuration
- Behavior configuration elements not supported.
- TextMessageEncoding
- HttpTransport
Bindings
- wsHttpBinding not supported. The only working binding is basicHttpBinding.
Milestones
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:
- Has a bug with loading configuration from web.config.
- 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:
- AllowCookies
- BypassProxyOnLocal
- HostNameComparisonMode
- MaxBufferPoolSize
- MaxBufferSize
- MaxReceivedMessageSize
- MessageEncoding
- ProxyAddress
- ReaderQuotas
- TextEncoding
- EnvelopeVersion
- TransferMode
- UseDefaultWebProxy
- ASP.NET integration - which is currently is partially implemented and:
- BasicHttpBinding without security, things to take into considerations:
- 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=”http://go-mono.com/status/”>class status pages</a>.
Contracts
Serialization
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
Basic
Binding Element |
Description |
Mono Status |
Relevant to GH |
OneWayBindingElement |
A binding that supplies a one-way conversion layer |
Implemented |
|
TransportBindingElement |
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
|
|
CompositeDuplexBindingElement |
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 |
|
StreamUpgradeBindingElement |
Indicate that a custom stream upgrade provider should be used, for example when adding a compression to a text stream |
Implemented, Abstract. |
|
PrivacyNoticeBindingElement |
Represents the binding element that contains the privacy policy for the WS-Federation binding |
|
|
UseManagedPresentationBindingElement |
used to communicate with a CardSpace Security Token Service that supports the CardSpace profile of WS-Trust |
Not Implemented |
|
ReliableSessionBindingElement |
Supports reliable session between endpoints |
Not Implemented |
|
SecurityBindingElement |
An abstract class that, when implemented, represents a binding element that supports channel SOAP message security |
Seems to be implemented as an abstract class |
|
MessageEncodingBindingElement |
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. |
|
PeerResolverBindingElement |
Defines the abstract base class for binding elements used to create peer resolver objects |
Not Implemented |
|
TransactionFlowBindingElement |
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 |
|
ContextBindingElement |
|
|
|
TransportBindingElement
Binding Element |
Description |
Mono Status |
Relevant to GH |
PeerTransportBindingElement
|
|
Not Implemented |
|
HttpTransportBindingElement
|
used to specify an HTTP transport for transmitting messages |
Implemented |
|
HttpsTransportBindingElement
|
used to specify an HTTPS transport for transmitting messages |
Not Implemented |
|
TcpTransportBindingElement
|
used to specify an TCP transport for transmitting messages |
Implemented |
|
NamedPipeTransportBindingElement
|
Named Pipe transport |
Not Implemented |
Not relevant |
MsmqTransportBindingElement MsmqIntegrationBindingElement
|
Integration with ms.net message queue |
Not Implemented |
Not relevant |
ConnectionOrientedTransportBindingElement
|
Base of TcpTransportBindingElement |
Implemented, Abstract |
|
StreamUpgradBindingElement
Binding Element |
Description |
Mono Status |
Relevant to GH |
SslStreamSecurityBindingElement |
supports channel security using an SSL stream |
Not Implemented |
|
WindowsStreamSecurityBindingElement |
|
Not Implemented |
Not relevant |
SecurityBindingElement
Binding Element |
Description |
Mono Status |
Relevant to GH |
AsymmetricSecurityBindingElement |
Supports public key encryption |
Implemented |
|
SymmetricSecurityBindingElement |
Supports shared key encryption |
Implemented |
|
TransportSecurityBindingElement |
Base class of security elements |
Implemented |
|
MessageEncodingBindingElement
Binding Element |
Description |
Mono Status |
Relevant to GH |
BinaryMessageEncodingBindingElement |
Binary format |
Implemented |
|
MtomMessageEncodingBindingElement |
Binary optimized format, Microsoft specific | Not Implemented in System.Runtime.Serialization |
|
TextMessageEncodingBindingElement |
Text format |
Implemented |
|
WebMessageEncodingBindingElement |
|
Implemented |
|
PeerResolverBindingElement
Binding Element |
Description |
Mono Status |
Relevant to GH |
PeerCustomResolverBindingElement |
|
|
|
PnrpPeerResolverBindingElement |
|
|
|
Binding Types
BasicHttpBinding
Is the only built in binding that has a reasonable status, and can be used to host a service. This binding supports two TransportBindingElements:
- HttpTransportBindingElement – This is not fully implelmented, main aspects are:
- 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.
- 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.
- HttpsTransportBindingElement – This element is not implemented due to missing implementation of the corresponding IChannelListener.
In addition it supports two MessageEncodingBindingElements
- TextMessageEncodingBindingElement – which is supported
- 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).
WSHttpBinding
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
WebHttpBinding
expose WCF Web services through HTTP requests that use “plain old XML” (POX) style messaging instead of SOAP-based messaging
NetPeerTcpBinding
A secure tcp based Binding for peer to peer network application.
NetTcpBinding
A Binding that uses Tcp as the transport layer This binding by default uses the following elements:
- TcpTransportBindingElement
- BinaryMessageEncodingBindingElement
- SymetricSecurityBindingElement
WSDualHttpBinding
A WS interoperable binding that is used with duplex service contracts.
CustomBinding
MsmqBindingBase
NetNamedPipeBinding
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
Binary
Implemented.
Text
Implemented
Mtom
Not Implemented
Web
Implemented