public async Task InternalInterface_WithInternalMembersFromOtherAssemblies()
    {
        var streams   = FullDuplexStream.CreateStreams();
        var server    = new ServerOfInternalInterface();
        var serverRpc = JsonRpc.Attach(streams.Item2, server);

        var clientRpc = JsonRpc.Attach(streams.Item1);

        // Try the first internal interface, which is external to this test assembly
        var proxy1 = clientRpc.Attach <IServerInternalWithInternalTypesFromOtherAssemblies>();

        Assert.NotNull(await proxy1.SomeMethodAsync().WithCancellation(this.TimeoutToken));
    }
    public async Task InternalInterface()
    {
        var streams   = FullDuplexStream.CreateStreams();
        var server    = new ServerOfInternalInterface();
        var serverRpc = JsonRpc.Attach(streams.Item2, server);

        var clientRpc = JsonRpc.Attach(streams.Item1);

        // Try the first internal interface, which is external to this test assembly
        var proxy1 = clientRpc.Attach <StreamJsonRpc.Tests.ExternalAssembly.ISomeInternalProxyInterface>();

        Assert.Equal(-1, await proxy1.SubtractAsync(1, 2).WithCancellation(this.TimeoutToken));

        // Now create a proxy for another interface that is internal within this assembly, but derives from the external assembly's internal interface.
        // This verifies that we can handle multiple sets of assemblies which we need internal visibility into, as well as that it can track base type interfaces.
        var proxy2 = clientRpc.Attach <IServerInternal>();

        Assert.Equal(3, await proxy2.AddAsync(1, 2).WithCancellation(this.TimeoutToken));
    }