A DataContract is just an understanding of an object type that could be sent. If you wanted to pass a class object through the service, you would need a data contract, otherwise the other end won't know how to handle the complex type as it only really understands primative types. It really is just a way of serializing the data.

The service can be a pass-through OR the BLL itself. That implementation is up to you. Having the service pass whatever it received to the BLL would prompt looser coupling of the components. You will have to set up DataContracts and the functions that consume them in the service now otherwise a service that doesn't have methods or doesn't understand what is being sent isn't very useful.