As Java and .NET are two completely different development platforms, you can't use standards from one with the other. For example, .NET has Remoting, which allows you to directly access and use objects remotely, or essentially pass messages accross a disparate network to remote objects, and get responses back. Java has something similar, but for java programs only. The only truely universal, cross language, cross platform messaging infrastructure is Web Services. You can develop a web service in Java and consume it with a C# program, and pass messages back and forth that way. Or vice-a-versa, and even if neccesary, develop web services in both so they can talk to each other. The bummer about web services is they are heavy compared to remoting, and generally require a web server on at least one end for them to work.