Some background reading from the Redbook online will be beneficial. Chapter 3 explains all about the connections between viewport + projections + gluLookAt.
The arguments to Viewport are in pixel units and the rectangle you define with it must be no greater than the actual window itself.
To follow up on dletozeun’s reply,
glOrtho maps global X,Y,Z cooridinates to the viewport pixel cooridinates I,J as follows
suppose you set
Gl.glOrtho(0, 34.2, 0, 90.6, -1.0, 1.0)
A point at (XYZ)=(0,0,0) would be mapped to the window at the far lower left pixel (IJ)=(10,20) and a point at (XYZ)=(34.2,90.6,0) would be mapped to the upper right window pixel (IJ)=(10+50,20+50). Points outside of the ortho box will simply be clipped ie not plotted to the screen.
So glOrtho allows you to define your global coordinate system in convenient units (ie not in pixels) and points will be automatically mapped back to the viewport pixels – this is a valuable feature because it is best to avoid thinking in terms of pixels and think in terms of global coordinates appropriate to you model. Typically, the only time you think in terms of pixels is when you set Viewport, and from then on openGL maps your global coordinate system back to the screen for you without you needing to think about pixels again. This is a great help when you allow the window size to change and you only have to change the code accordingly in one spot, the Gl.Viewport() settings!