Skip to main content

WitRPC and Discovery

· 3 min read

As discussed in previous articles, WitRPC is inspired by WCF, not necessarily in its internal implementation, but in terms of developer experience and capabilities. One of the key technologies that WCF offered "out of the box" was Discovery. With Discovery, a server could announce its presence on a local network via UDP multicast, allowing clients to learn about available services and decide whether to connect. WitRPC offers a similar feature, enhancing flexibility in dynamic environments.

WitRPC and Blazor WebAssembly

· 4 min read

Blazor WebAssembly is a powerful tool for creating web frontends and beyond when integrated with frameworks such as MAUI, WinUI, or WPF. By pairing Blazor WebAssembly with UI frameworks like MudBlazor, developers can create sophisticated web applications using a unified C# object model, without needing extensive knowledge of HTML, CSS, or JavaScript.

However, Blazor WebAssembly comes with specific considerations, particularly around security and encryption.

Dynamic Proxy vs Static Proxy in WitRPC

· 3 min read

By default, Castle DynamicProxy serves as the primary tool in WitRPC for creating proxy objects based on interface contracts. This allows developers to seamlessly interact with remote services as if they were local objects. DynamicProxy supports intercepting function calls, property access, and event subscriptions, making it an incredibly versatile solution for .NET development. Moreover, it effortlessly handles generic methods, where parameter types are undefined at the interface declaration stage.

However, DynamicProxy is not universally applicable. For instance, it does not work in Ahead-of-Time (AoT) compilation environments, such as Blazor WebAssembly or .NET Native AOT, where runtime code generation is unsupported.

For such scenarios, WitRPC introduces a static proxy implementation based on Source Generation using Roslyn APIs.

Inter-process Communication with WitRPC

· 4 min read

Working on engineering systems that often involve legacy components, I frequently face challenges in integrating outdated elements with modern platforms. For example, you may encounter scenarios requiring support for obsolete file formats that can only be opened by a 32-bit component. This limitation poses a dilemma: either remain on an outdated platform, foregoing modern framework advantages like 64-bit addressing, or isolate the legacy component�s logic into a separate process with which the main application communicates.

There are numerous scenarios for inter-process communication (IPC) on the same machine, including:

  • Supporting components built for a different platform than the main system.
  • Running multiple parallel, independent processes to overcome system limitations.
  • Enabling data exchange between several concurrently running applications.
  • Many others.