For the port on the MiddleTop, you want to do this:
port.ToSpot = MiddleTop;
To answer your other question, consider the new sample in version 3.0, AnimatedBasicApp.
That focuses on animation, but you can ignore that and generalize how it paints circles along the links.
Note that if the circles get too wide to fit in the area where GoStroke thinks they might be drawn, you may need to override ExpandPaintBounds to increase that area. For small circles it’s not a problem due to the MiterLimit and possibly any arrowheads.