Hi Navid,
You usually use web services when you have a lot of complex computations to complete and you want to push that processing onto the server instead of running it on the client. Another big concern is security. Putting a middle web service layer between an InfoPath client and, say a database or other low-level data stores not only gives you more security but also allows your software to be more robust as it grows. When necessary, you can change the underworkings of the web service to load balance between several servers without touching the client. Ideally you would have zero code in the client and everything contained in a web service. This way when the code needs to change (as it inevitably will) you can change everything without the incredibly large pain of deployment.
I'm not sure what you mean by your last question, but you would want to do web services over port-to-port client/server interaction because it is much more abstracted and easier to work with, albeit less performant.
Matt Faus / Microsoft InfoPath MVPQdabra® Software / Streamline data gathering to turn process into knowledge