-
Notifications
You must be signed in to change notification settings - Fork 5
The license is MIT.
Just make any invocation to the remote host. If the host is unreachable, Genuine Channels will fire an exception with GenuineChannels.Exception.Send.DestinationIsUnreachable error identifier, so you easily can recognize it programmatically. Usually it takes about 5 seconds for Genuine Channels to check the connection.
If you use GTCP channel, just open firewall for incoming connections to the server’s port. Usually it is enough. If you use GHTTP channel, then user should be able to download any web page from your site hosting .NET Remoting solution. You need to set up proxy settings on the client, if client uses proxy server.
I highly do not recommend using HTTP channel authentication. Build up and use an appropriate Security Session instead. This is faster, efficiently and gives you much more possibilities.
When I tried to send a message containing 1 megabyte buffer, it failed with a packet too large error...
You have met with the queue restriction. You need to increase MaxPacketSize and MaxTotalSize channel settings to the reasonable values. Take a look though the Queuing section in Programming Guide for more details.
Genuine Channels compress the content being sent by default. So it tries to compress 1/2/3 megabytes during the sending and, of course, it takes a lot of CPU, memory and time resources. You can switch off the compression either via forcing compressionless Security Session, or specifying Compression="false" channel's parameter.
Asked by michelstlouis: When FIPS is enabled on Windows 10, the communication stops. Is FIPS supported?
FIPS (Federal Information Processing Standards) are a set of standards that describe document processing, encryption algorithms and other information technology standards for use within non-military government agencies and by government contractors and vendors who work with the agencies (from https://whatis.techtarget.com/definition/FIPS-Federal-Information-Processing-Standards)
Answered by netsrotr: We had the problem in the past (years ago, sorry). But as I remember it depends on the used security algorithms you use for GC communication encryption. We use GC.SecuritySessionServices
with SSPI.SspiFeatureFlags.None
/ SSPI.SupportedSspiPackages.Negotiate
to encrypt the important parts of communication and have no problems with FIPS compliance. Here same code snippets that might help you.
Helper functions somewhere in a static class that returns as a wrapper for calls to a remove server object:
public static IDisposable SecurityContextKeeper()
{
if (!IsWebProcessEnvironment)
{
// server is IRemotable/MarshalByRefObject
return GenuineChannelsHelper.SecurityContextKeeper(server);
}
return new SimpleDisposable();
}
Used to call this way:
public static T SafeAndSecureRemoteFunctionCall<T>(Func<T> remoteFunc)
{
if (remoteFunc == null)
throw new ArgumentNullException("remoteFunc");
try
{
using (SecurityContextKeeper())
{
return remoteFunc();
}
}
catch (Exception ex)
{
// may throw, if it was a communication failure:
ServiceCommunicationException.AnalyzeAndThrow(ex, FriendlyServiceNameAndUri, IsRemotingActive);
throw; // if not yet thrown
}
}
and GenuineChannelsHelper.cs:
public static IDisposable SecurityContextKeeper(IRemotableComponentBase service)
{
if (RemotingServices.IsTransparentProxy(service))
{
return new SecurityContextKeeper(new SecuritySessionParameters(
SESSecurityKeyProviderName,
SecuritySessionAttributes.EnableCompression, // we do that always
TimeSpan.MinValue));
}
return new SimpleDisposable();
}
Great, we'll accept your PRs.