Sì certo, infatti è la cosa corretta da fare quella di lavorare il più possibile sul server dove appunto puoi "centralizzare" le varie funzionalità.
Infatti ti dicevo sqlREporting come spunto proprio per questo motivo, ossia lo metti dentro a qualche metodo del WebService che fa tutto il lavoro, a differenza di Crystal è più leggero e non dovrebbero esserci limitazioni di esecuzione su server.
Il codice è abbastanza semplice, è un metodo "Render" al quale passi il formato e ti fai tornare lo stream sottoforma di byte[] e poi ne fai quello che vuoi, un ad esempio con un codice di questo tipo:
ReportViewer viewer = new ReportViewer();
LocalReport report = viewer.LocalReport;
report.ReportPath = "...fullpath del file report...";
report.DataSource.Add( new ReportDataSource("...nome...", ...dati...) );
//---queste ci vogliono
string mimeType;
string encoding;
string fileNameExtension;
string[] streams;
Warning[] warnings;
string deviceInfo = "<DeviceInfo>" +
"<PageHeight>29cm</PageHeight>" +
"<PageWidth>21cm</PageWidth>" +
"</DeviceInfo>";
byte[] bytes = report.Render(format, deviceInfo, out mimeType,
out encoding, out fileNameExtension,
out streams, out warnings);
...
se vuoi altre info trovi in internet e nei link che ti ho dato prima.
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo