The latest public preview of Visual ReCode is available for download and best of all, it’s free! We’ve added even more features (see below) for a more comprehensive WCF to gRPC migration experience.
Duplex service support
Preview 3 adds support for WCF Duplex services, that is, services with a
CallbackContract that allows the
server to “call methods” on the client.
gRPC does not directly support this feature, but it does support bidirectional streaming, which also creates a persistent connection between client and server and allows messages to be sent arbitrarily in both directions. Messages can be of different types, so something similar to a Full Duplex service can be implemented by reading the messages off the stream and invoking different methods based on the message type.
Obviously this implementation code will be very different from the WCF approach, so Visual ReCode’s client generator will provide a mapping between the gRPC stream and a callback contract implementation, meaning that your client code will continue to work as before.
One thing that is not supported in the initial Preview 3 release is methods on the Service or Callback contract that return a value. This will be added in the Release Candidate we hope to ship in the next few days.
Protobuf does not have a native type that is equivalent to C#’s
decimal; only floating-point types are provided.
For financial applications or anything that requires perfect precision, we know this is unacceptable. So Visual ReCode
will now add a custom
DecimalValue type to any converted application that uses
decimal values in its contracts.
This custom type is provided as a
decimal_value.proto file included in the generated project, along with a C# implementation
that handles implicit conversion to the native
Several issues have been resolved in this release, including:
OperationContractmethods that return
Taskare now handled correctly. Visual ReCode generates a separate empty response message type for each method, in line with gRPC best practices.
- Certain combinations of types (e.g. nested classes) were causing problems in Preview 2; this has been fixed.
Serializabletypes are now supported as well as
DataContract. Note that
MessageBodyMemberfields are all converted to regular Protobuf message fields, as they were specific to SOAP and have no meaning in gRPC.
Release Candidate coming soon
A Release Candidate build will be out in the next few days, which will include support for return values from
CallbackContract methods, and from
SessionRequired service methods. We’ll also have a new installer and some
other bits of polish.
Once we have some feedback from Preview 3 and the RC, we will be releasing and supporting the final Visual ReCode 1.0 - hopefully very soon now!
We’ve got a lot more planned for subsequent releases, including support for migrating WCF services or ASP.NET Web API 2.x applications to ASP.NET Core 3.1 MVC, and even .NET Remoting to gRPC for people with some real legacy code. And we’ll continue to improve and refine the migration process, and look at other ways we can help developers rescue their legacy code and bring it up to date.
Are We Missing Something?
If you have a migration scenario from .NET Framework to .NET Core that’s giving you pause, please reach out to us and let us know about it - we want to be sure we’ve got the most comprehensive option available to re-code your app for the latest in .NET!