Add ServiceStack Reference​
We have an exciting feature in this release showcasing our initial support for generating Native Types from client VS.NET projects using ServiceStackVS new Add ServiceStack Reference feature. It provides a simpler, cleaner and more versatile alternative to WCF's Add Service Reference in VS.NET.
Our goal with Native Types is to provide an alternative for sharing DTO dlls, that can enable a better dev workflow for external clients who are now able to generate (and update) Typed APIs for your Services from a remote url - reducing the burden and effort required to consume ServiceStack Services whilst benefiting from clients native language strong-typing feedback.
This is just the beginning, whilst C# is the first language supported it lays the groundwork and signals our approach on adding support for typed API's in other languages in future. Add a feature request for your favorite language to prioritize support for it sooner!
Example Usage​
The easiest way to Add a ServiceStack reference to your project is to right-click on your project to bring up ServiceStackVS's Add ServiceStack Reference
context-menu item. This opens a dialog where you can add the url of the ServiceStack instance you want to typed DTO's for, as well as the name of the T4 template that's added to your project.
After clicking OK, the servers DTO's and ServiceStack.Client NuGet package are added to the project, providing an instant typed API:
Consuming Services from Mobile Clients now Easier than Ever!​
In addition with our improved PCL Support in this release, it's never been easier to create an instant Typed API for a remote Service consumable from any Xamarin.Android, Xamarin.iOS, Silverlgiht 5, Windows Store or .full NET4.0+ platforms - Here's a quick demo of it working in Android:
Advantages over WCF​
- Simple Uses a small T4 template to save generated POCO Types. Updating as easy as re-running T4 template
- Versatile Clean DTOs works in all JSON, XML, JSV, MsgPack and ProtoBuf generic service clients
- Reusable Generated DTO's are not coupled to any endpoint or format. Defaults are both partial and virtual for maximum re-use
- Resilient Messaging-based services offer a number of advantages over RPC Services
- Flexible DTO generation is customizable, Server and Clients can override built-in defaults
- Integrated Rich Service metadata annotated on DTO's, Internal Services are excluded when accessed externally
Available from v4.0.30+ ServiceStack Projects​
Native Types is now available by default on all v4.0.30+ ServiceStack projects. It can be disabled by removing the NativeTypesFeature
plugin with:
Plugins.RemoveAll(x => x is NativeTypesFeature);
For detailed info on how NativeTypesFeature works, its different customization options and improvements over WCF, checkout the Add ServiceStack Reference docs.
Upgrade ServiceStackVS​
To take advantage of this feature Upgrade or Install ServiceStackVS VS.NET Extension. If you already have ServiceStackVS installed, uninstall it first from Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall
.
Improved PCL Story​
Our PCL Story has been greatly improved in this release now that ServiceStack.Interfaces
has been converted into a pure PCL dll. This now lets you maintain your server DTO's in a pure PCL DLL that can be shared as-is on most supported platforms (Profile136):
- Xamarin.iOS
- Xamarin.Android
- Windows Store
- WPF app using .NET 4.0 PCL support
- Silverlight 5
Whilst our impl-free ServiceStack.Interfaces.dll
was able to be converted into a pure PCL dll, our Client libraries have instead resorted to using PCL's Bait and Switch technique to provide platform-specific extensions and optimizations. The one outlier is Silverlight5 which remains a custom (non-PCL) SL5 build, that whilst can now share DTO's, still can't support projects with dependencies on the PCL-compatible version of ServiceStack.Client.
As of this release all PCL, platform and Silverlight dlls are now merged into the main ServiceStack.Client NuGet packages so now any clients need only reference the main Client NuGet package:
<PackageReference Include="ServiceStack.Client" Version="5.*" />
The Hello PCL project now contains examples of reusing a Server DTO project with all supported client platforms as well as showing re-use of a high-level SharedGateway
which referenes ServiceStack.Client
that's shared between all PCL-compatible platforms.
New ServiceStack + AngularJS Example - StackApis​
StackApis is a simple new ServiceStack + AngularJS example project created with ServiceStackVS AngularJS Template showcasing how quick and easy it is to create responsive feature-rich Single Page Apps with AngularJS and AutoQuery. StackApis is powered by a Sqlite database containing snapshot of ServiceStack questions from StackOverflow APIs that's persisted in an sqlite database using OrmLite.
StackApis AutoQuery Service​
The Home Page is built with less than <50 Lines of JavaScript which thanks to AutoQuery routes all requests to the single AutoQuery Service below:
[Route("/questions")]
public class StackOverflowQuery : QueryBase<Question>
{
public int? ScoreGreaterThan { get; set; }
}
Not even
ScoreGreaterThan
is a required property, it's just an example of a formalized convention enabling queries from Typed Service Clients.
Feel free to play around with a deployed version of StackApis at stackapis.netcore.io.
You can also use the public https://stackapis.netcore.io/
url to test out ServiceStack's new Add ServiceStack Reference feature :)
Swagger Support​
All static resources are now embedded​
ServiceStack's Swagger Support received some welcomed enhancements thanks to @tvjames and @tyst's efforts which now sees all of Swagger's static resources embedded into a single ServiceStack.Api.Swagger.dll
, taking advantage of the Virtual File Systems transparent support for Embedded Resources, making it easier to manage and upgrade Swagger as a self-contained unit.
New Bootstrap theme for Swagger​
A new attractive Bootstrap Theme was also added to Swagger, available from /swagger-ui-bootstrap/:
You can change the metadata page plugin link to point to this new theme with:
Plugins.Add(new SwaggerFeature {
UseBootstrapTheme = true,
LogoUrl = "your-logo.png" //optional use your own logo
});
Swagger was also been updated to the latest version.
Authentication​
Unique Emails​
ServiceStack now verifies emails returned by OAuth providers are now unique where if there's already another UserAuth with an existing email, authentication will fail and redirect (for HTML/Web Browser requests) with the Error token:
/#f=EmailAlreadyExists
This behavior is in-line with ServiceStack's other AuthProviders. If this change causes any issues, it can be disabled with:
AuthProvider.ValidateUniqueEmails = false;
This doesn't apply to Users who login with multiple OAuth Providers as there accounts automatically get merged into a single UserAuth entity.
CustomValidationFilter​
A new CustomValidationFilter
was added to all AuthProviders which can be used to return a IHttpResult
to control what error response is returned, e.g:
Plugins.Add(new AuthFeature(
() => new CustomUserSession(),
new IAuthProvider[] {
new FacebookAuthProvider(appSettings) {
CustomValidationFilter = authCtx =>
CustomIsValid(authCtx)
? authCtx.Service.Redirect(authCtx.Session.ReferrerUrl
.AddHashParam("f","CustomErrorCode"))
: null,
},
}));
Breaking Changes​
Upgrade all ServiceStack NuGet packages​
The primary breaking change was converting ServiceStack's core ServiceStack.Interfaces.dll
into a pure portable class library which as it's incompatible with the previous non-PCL ServiceStack.Interfaces.dll requires that all NuGet dependenices (inc. transitive dependencies) be upgraded to v4.0.30. The version number was bumped to v4.0.30 specifically to stress that it's incompatible with any <v4.0.2x before it. The only other issue we ran into after upgrading most of ServiceStack projects is on projects that reference or mock Interfaces that reference a System.Net.*
Type like HttpWebResponse
in IServiceClient
will now require an explicit reference to System.Net
for the C# compiler to consider them to be of the same type.
In summary if you have a build error when upgrading v4.0.30 then:
- Delete any older v4.0.2x SS packages from NuGet /packages
- Reference
System.Net
on projects that still have build errors
TypeDescriptor support removed​
In order to convert ServiceStack.Interfaces into a portable class library we've had to remove support for an undocumented feature allowing adding of Attributes via .NET's TypeDescriptor. If you were using TypeDescriptor, you can switch to adding attributes dynamically using ServiceStack's Reflection APIs.