I've used VB.NET as an OPC Client to RSLinx.
.NET has a problem with OPC because COM Interop can't handle the interface.
IMO the best way is to use COM objects that make the OPC calls and then expose an Interop freindly interface to .NET
This is the approach taken by Kineticart and is the one...