WCF-Xtensions includes advanced bindings, binding elements, behaviors, factories and clients that extend the capabilities of your WCF services and improve the performance of your WCF applications.
The WebSocket transport binding element offers you high-throughput, cross-platform, full-duplex communication between devices, browsers, desktops and servers.
Once one side establishes a channel with another side, both sides can send text or binary data to each other whenever they like.
WCF-Xtensions uses the high-speed WebSocket implementation of PowerWebSockets which provides wider availability, better performance and more features than the system-provided WebSocket implementation of .NET.
Performance features such as full-scale asynchronous design, adaptive resource management, transparent burst messaging and ultra-fast transport compression provide high responsiveness, low memory use and minimal bandwidth consumption.
Supports the "per-message" compression specification and provides two compression extensions, DEFLATE as per the spec and LZF4 for minimal processing overhead.
Available on all supported platforms except that Xamarin, Windows Phone and Silverlight apps cannot act as servers due to platform limitations.
The JSON message encoding binding element of PowerWebSockets enables any WCF client or server to communicate using LiteJM with any other WCF or PWS client or server that also uses LiteJM and the same transport.
This message encoding can be used with any WCF transport, but it is recommended to be used primarily with:
The same WebSocket transport binding element is also available in PowerWebSockets.
LiteJM features such as duplexity and concurrency work only with WCF transports that support them.
The JSON message encoding binding element of WCF-Xtensions enables any WCF client or server to communicate using LiteJM with any other WCF or PowerWebSockets client or server that also uses LiteJM and the same transport.
The JSON message encoding of WCF-Xtensions is based on the Lightweight JSON Messaging system (LiteJM) of PowerWebSockets.
It uses the JSON format to enable communication not only between WCF clients and servers but also between WCF and PowerWebSockets clients and servers.
You can use all classic types of remote operations including One-Way, Request/Response and Fault messages. In addition to the usual RPC operations, it provides asynchronous streaming and Push-to-All messaging. All operations can be performed both synchronously and asynchronously, except of Push-to-All broadcasts which are always performed asynchronously.
Your application can simultaneously make multiple outstanding requests to the remote endpoint through a single channel.
LiteJM enables your application to send the next request before receiving responses to previous requests. This allows you to increase the number of concurrent operations without creating extra connections.
A unique feature of LiteJM is its ability to stream an arbitrary amount of binary data as an attachment to a JSON message. This enables you to combine a parameterized JSON request and high-throughput streaming into a single remote operation.
With full-duplex transports, one-way and request/response operations can be made in both directions of a connection.
The JSON serialization of LiteJM can optionally preserve the .NET type information, allowing you to use polymorphism when performing a remote operation invocation.
This message encoding can be used with any WCF transport, but it is recommended to be used primarily with:
LiteJM features such as duplexity and concurrency work only with WCF transports that support them.
The JSON message encoding binding element for WCF is also included in PowerWebSockets.
The Fast Infoset message encoding produces the most compact messages compared to the BinaryMessageEncodingBindingElement or any other system-provided message encondings available in WCF.
For medium-to-large messages, Fast Infoset means not only that you reduce bandwidth consumption but also that messages arrive faster at their destination. Higher compactness results in higher responsiveness.
Increasing compactness also means that servers complete faster the receiving of requests and the sending of responses, freeing them quicker to process more requests and responses.
Are you sending large data? Fast Infoset is the perfect encoding. Use TransferMode.Streamed with the Fast Infoset encoding for excellent performance.
On the .NET side, Noemax's Fast Infoset implementation can be used as a WCF message encoding on .NET Framework 4.6/4.5/4.0/3.5, .NET Compact Framework 3.5, Xamarin.iOS, Xamarin.Android, Xamarin.Mac, Windows Phone Silverlight 8 and 8.1, Windows Phone 7.1, Silverlight 5 and Mono.
On the Java side, Oracle's Fast Infoset implementation can be used with Tomcat, Jetty, JBoss/WildFly, Weblogic, Glassfish, WSO2, Apache CXF, Apache Axis2, JAX-WS, Metro, Jersey, Grizzly and other application servers and Web Services frameworks.
And, of course, all these are fully interoperable.
When using HTTP/HTTPS, you can view Fast Infoset messages travelling on the wire by adding the Fast Infoset Message Inspector to the Fiddler web debugging proxy. You can download the inspector from here.
The HTTP content negotiation binding element enables you to improve efficiency by supporting multilpe message encodings and compression methods on the same HTTP or HTTPS endpoint.
You can transparently add new message encodings or compression methods to the same endpoint to make use of them in new clients while at the same time retaining interoperability with older clients.
The compression mode lets you choose between several content negotiation modes:
Optimistic | The client always sends compressed requests to the service without any negotiations. |
---|---|
Pessimistic | The client never sends compressed requests to the service but does accept compressed responses when the remote endpoint supports compression. |
Adaptive | The client does not send compressed request to the service until the remote endpoint sends the first compressed response. Once the service sends a compressed response, the client automatically switches to the Optimistic compression mode. |
Selective | Compression is used only when requests are sent to operations that are marked with the [EnableCompression] attribute. |
The message compression binding element always compresses both request messages and response messages. It enables you to select the compression method and the compression level.
It provides fast and simple compression of the request and response message payload that can be used universally.
While the ContentNegotiationBindingElement can be used only with the HTTP transport, the MessageCompressionBindingElement can be used with any transport.
Supports compression threshold which disables compression for messages below a specified size. This allows you to use compression more effectively when messages are too small to compress.
Supports the LZF4, DEFLATE, ZLIB and GZIP compression methods.
The transport compression stream upgrade offers you an impressive reduction in message size at the lowest processing expense and can be used with transports that support stream upgrade.
The compact envelope behavior improves compactness and performance without requiring any changes in a binding's configuration.
It can be used with message security to accelerate encryption and to reduce the size of encrypted messages.
The LiteHTTP transport binding element provides a high-performance, lightweight HTTP implementation with embedded HTTP content negotiation and compression.
LiteHTTPS is currently not supported on Windows Phone and Silverlight.
The SOAP/TCP transport binding element provides interoperability between the .NET ecosystem and Java application servers that expose SOAP/TCP endpoints.
SOAP/TCP supports three message encodings: text, stateless Fast Infoset and stateful Fast Infoset. Stateful Fast Infoset is the most efficient and is the default on the Java side.
WCFX is available on the following | |
---|---|
PLATFORMS |
|
.NET Framework 4, 4.5 and 4.6 | |
.NET Framework 3.5 | |
.NET Compact Framework 3.5 | |
Xamarin.iOS | |
Xamarin.Android | |
Xamarin.Mac | |
Windows Phone Silverlight 8 and 8.1 | |
Windows Phone 7.1 | |
Silverlight 5 | |
Mono |