Alternative to:

Contained in the ServiceStack.Authentication.OpenId NuGet package is ServiceStack's support of OpenId 2.0
Authentication. This allows ServiceStack-enabled ASP.NET / MVC sites and web services to authenticate and accept
registration from any OpenId 2.0 Authentication provider.

Like most .NET OpenId libraries the
de-facto and excellent DotNetOpenAuth library is used to enable our OpenId support.

Included OpenId providers:

As caching is an essential technology in the development of high-performance web services, Service Stack has a number of
different caching options available that each share the same
common client interface
for the following cache providers:

Redis, Memcached, InMemory, Azure, DynamoDb

Any response can be cached with the in-built Caching Pattern available in the ToOptimizedResultUsingCache extension method.
This caches the most optimal result for all formats (inc. user-defined), i.e. if your browser supports gzip/deflate
it will cache the compressed output.

Alternative to:

ServiceStack includes the ability to limit the visibility and accessibility of services using built-in
declarative Restrict attributes. Restrictions can be applied on the different attributes of a Service
request including it's network proximity, endpoint type, format, encryption, call style, http method, etc.

Visibility controls whether its existence is publicized on externally viewed metadata pages and
services, whilst accessibility restrictions controls which usage scenarios the service can be called.

It supports multiple fine-grained restriction scenarios that can easily enforce popular configurations
like hiding admin services or only allowing HTTP plain-text traffic from Internal Networks and only allow
external access via secure HTTPS.

Built into ServiceStack is an optional Authentication feature that can be used to add Authentication to
existing services to Authenticate and Assign/UnAssign Roles to existing as well as registering new users.

Since the Session support is built-on clean, legacy-free and code-first APIs, they are easily accessed
from other ASP.NET frameworks where the same ServiceStack session can be shared between WebForms or MVC.

Thanks to its
message-based design,
ServiceStack Services are already well suited for processing by MQ Brokers.
As MQ services promote low-coupling and provide the most durable and reliable link between two endpoints,
it is more suitable for many offline, background and parallelizable tasks that have historically
only been done with web services.

ServiceStack greatly improves the dev experience as it lets you re-use existing Services saving all the
dev effort required to implement, whilst letting you trivially debug them since they're available as a normal REST service.

By default ServiceStack ships with a distributed
Redis MQ
and an InMemory and RCON MQ Hosts.
In future we intend to provide MQ Service adapters for RabbitMQ, Amazon SQS, Azure ServiceBus and ZeroMQ brokers.

.NET's leading C# client for the Redis NoSQL datastore.
Redis is one of the fastest and most feature-rich key-value
stores to come from the NoSQL movement.
It is similar to memcached but the dataset is not volatile,
and values can either be stored in comp-sci data structures including
strings lists, sets, sorted sets or hashes.

Alternative to:

In order to accessing physical files in view engines from multiple sources, ServiceStack includes its own pluggable
virtual file system API that lets it support multiple filesystem backends.

The virtual file system (VFS) is what allows ServiceStack to support view engines in a standard ASP.NET websites
(e.g. serving directories from the root directory) as well in self-hosting stand-alone HttpListener websites and
Windows Services serving from the output /bin directory as well as embedded resources inside .dlls, any combination
of both and in future from remote datastores.

In addition to the built-in auto-generated metadata pages, ServiceStack also includes support for Swagger a
popular metadata service description and UI to describe and introspect REST services. The SwaggerFeature is
available in the ServiceStack.Api.Swagger NuGet package that's easy value-add to any existing ServiceStack instance.

Swagger builds on the existing Route and DataMember metadata DTO attributes shared by ServiceStack's built-in
automated metadata pages and adds
Custom Api and ApiMember attributes you can use to further annotate your services for Swagger.

Thanks to ServiceStack's strongly typed, convention-based, message-based design it's able to infer a greater
intelligence of your services which allows it to provide automated
generated metadata pages
available from the /metadata route.

Metadata pages provide a number of discovery features useful for consumers wanting to explore your API:

List of all visible web services and the endpoints / formats they're accessible on

Links to a detailed page of each format, with example request and responses

Even in the spirit of Bind to interfaces, not implemenations, many .NET projects still have a hard dependency to log4net.

ServiceStack.Logging is an implementation and dependency-free logging API with adapters for all of .NET's popular
logging providers. It allows your business logic to bind to an easily-mockable and testable dependency-free interface
whilst providing the flexibility to switch to any of the available logging providers:

Profiling runs at the heart of any high-performance solution which was why the excellent
Mini Profiler
was ported and built right into ServiceStack. Once enabled, the auto HTML pages of each service will include
the Mini Profiler info widget which when expanded provides a detailed summary view highlighting where all
the time processing the request was spent.

In addition to viewing the overall time spent on different parts of ServiceStack's request pipeline, you
can continue to break them down further with by adding your own custom fine-grained profiling timing blocks.

ServiceStack was designed from the ground up to promote best practice remote service and code development
best-practices. With these goals we embed a port of the extremely fast and minimal Funq IOC which
contains 90% of the most used features behind an intuitive API at a fraction of the code-size of most Heavy-weight IOC's
which perform orders of magnitude slower. We've enhanced Funq to add support for Auto-wiring and Request lifetime scope.

Alternatively you can opt to use your preferred IOC instead which is supported via the IContainerAdapter interface.
The IOC wiki
includes instructions on enabling Ninject, StructureMap, Windsor and AutoFac IOC's.

HTML support works just as you would expect it to in a REST service framework - you can re-use
existing services and treat HTML as just another Content-Type and make use of any of the in-built and pluggable
MVC Razor,
Markdown Razor and
HTML Report ViewEngines.

Thanks to its tight integration, ServiceStack's HTML story is packed with features not found in alt frameworks

Alternative to:

Markdown is quickly becoming the preferred way to maintain any kind of textual content which has seen its
popularity surge in recent years thanks to its adoption by StackOverflow, GitHub and as the preferred
markup to store a number of blogs.

We love Markdown so much we developed a hybrid Markdown Razor format blending best features of our 2 favourite
template languages: Markdown and MVC Razor resulting in a capable content-optimized template for rendering content-heavy
websites like ServiceStack Docs

Markdown is a first-class View Engine in
ServiceStack's HTML Story which thanks to its tight integration is able
to support the ideal use-case of using Razor to structure the layout of your website whilst embedding Content
maintained in Markdown as a Partial View.

As validation and error handling is an essential part of developing services, ServiceStack provides a rich array of
error handling
options that work intuitively out-of-the-box, emitting the appropriate HTTP Status Codes and error responses on the wire.

Optimized for developer happiness ServiceStack allows you to idiomatically throw C# exceptions directly in your services or to
declaratively specify validation rules
using the excellent
Fluent Validation framework
and trivially consume them on the client in a end-to-end typed API, intuitively and conventionally with minimal effort.
The flexible Error Handling support also allows injecting custom generic error handling routines to handle errors.

Alternative to:

Configuration is another area in .NET suffering from over-complication, over-use, tight-coupling and un-necessary friction.
Only configurable parts of your app should be exposed in the Web.config, as it is a less capable, less verifiable and more
brittle option than configuring deps in code.

This is another point of friction we solve with our impl-agnostic Config API which leverages the human-friendly
JSV Format to in maintaining typed values,
.NET collections and rich complex object graphs (hydrated into POCOs), inside a single human-friendly appSetting.

The dep-free API decouples the configuration of your dependencies from the Web.config and allows the ideal scenario of
being able to specify default values in code, whilst remaining overridable with any Config source, e.g. Web.Config or Generic Dictionary, etc.

Often when developing or diagnosing software you will find the need to log and introspect .NET objects during debugging,
whilst creating tests, or with runtime logging.

Rather than manually inspecting watch lists, or manually writing out
print statements for individual properties, ServiceStack provides the handy Dump() extension method to return a recursively
pretty printed dump of an object graph as well as Print() and PrintDump() methods to print formatted strings and objects
directly to the console.

These diagnostic utils are all available as extension methods allowing for fluid chained-expressions on any object or string.

Although we encourage the remote service best practices of
keeping separate DTO models,
you wont need to maintain your own manual mapping yourself as you can leverage ServiceStack's built-in Auto Mapping support.

The Auto-mapping support is resilient and comprehensive and does a great job of fuzzy mapping in being able
to co-erce values of one type into another, e.g. you can convert between different Enum types with the same name, between
Enums and any value type and Strings, between properties and fields, POCOs and strings, vice-versa and many things in between.

Alternative to:

Being developed on top of raw ASP.NET Http Handlers has many benefits, one of them is
that we're built on top of the ASP.NET HTTP abstractions so we're able to easily
integrate with other ASP.NET frameworks like WebForms and ASP.NET MVC.

Protocol Buffers is a high-performance, compact binary wire format invented by Google who use it internally
for almost all of its internal RPC protocols and file formats.

ProtoBuf is a great addition to your ServiceStack services which includes .NET's 2 fastest Binary and Text-based formats.
For the .NET implementation we leverage
@marcgravell
excellent protobuf-net
- which is currently .NET's fastest serializer.
It's also the most compact which makes it an ideal choice in performance
sensitive areas, e.g. transferring binary data or a large dataset as efficiently as possible.

Message Pack is another fast binary serializer that thanks to its simplicity and
speed is a popular choice amongst Open Source libraries and frameworks that has bindings for most popular languages.

Its schema-less format modelled after JSON that instead uses a compact binary encoding.
Despite its name it's a
better Binary JSON than BSON
as it's faster, smaller and doesn't include foreign artefacts BSON has.

Because of its schema-less design it's able to work with un-attributed POCOs, unlike ProtoBuf which
requires each DTO property to be attributed with a numerical index.

ServiceStack's support of MsgPack is packaged in the MsgPackFormat plugin available in the
MsgPack NuGet package which includes
both the Server Format as well as a
typed C# Client.

Alternative to:

The optimal way to call ServiceStack services is to use any of the typed generic
C# Service Clients.
Consuming 3rd Party REST APIs historically hasn't been a great experience as it relies
on the legacy WebRequest which is versatile but also suffers from exposing an out-dated and
unpleasant API for your app code to use.

This leaves a pleasant and intuitive API that allows most HTTP clients tasks in a single readable chained expression.
It remains versatile as it allows overriding default behavior and access to the raw HTTP Request and Responses
using filters and named params.

In order to provide the most productive and frictionless end-to-end development experience you need a great client
story, and ServiceStack's generic and typed .NET service clients are best-in-class.

As a side-effect of the
inherent benefits in our message-based design,
we can provide .NET's most succinct, end-to-end typed API without any code-gen or post-build steps.
You're able to re-use the code-first DTO's services were defined with, as-is, inside clients.

This has many benefits, client/server DTO's are kept in sync, you're not reliant on black-box tooling,
message-based DTO designs are more resilient, and support
the natural evolution of services. It's inherently simpler with less friction as client and server call-sites
have symmetrical parity as the same DTO the client sends is transparently hydrated into services on the server.

A fast, unified and integrated replacement for WCF, WebAPI and MVC

Holistically constructed to reduce artificial complexity. Services are designed for maximum re-use