15 December 2009

Things I love about Visual Studio 2010: IntelliTrace

IntelliTrace is the next step in evolution for debuggers. It allows you to track everything that is happening during a debug session. It can track actions like clicking on a button, reading for a file, executing an ADO.NET call (including the actual call !) and a lot of other things.
You can think of IntelliTrace as some sort of log for all actions of the program.



You can also record the call stack for each event but it will slow down the debugging experience and you won't be able to use the "Edit and Continue" feature anymore, but it will allow to have much more details about the execution context of each event.

27 October 2009

SSL problem when installing TFS 2010

I add this error when trying to install TFS 2010 Beta 2 on a shiny new Windows Server 2008 R2 :
TFxxxxxx: SQL Server Reporting Services is configured to require a secure connection, however no HTTPS URL is configured with a valid certificate

So first thing was to remove the SSL binding from the report server (using the Reporting Services Configuration Manager), but it did not change anything from the TFS configuration checker point of vue.
The fact is this checker does not care about whether SSL is actually in use for the report server, it simply checks IF SSL can be enabled in the report server. That means that you must completely
disable SSL and this can only be done by modifying the .config file of the report server.

Just navigate to your report server folder (usually \MSRS10.MSSQLSERVER\Reporting Services\ReportServer), open the rsreportserver.config file for editing and locate the parameter named SecureConnectionLevel and set its value to 0 to deactivate security).

Re-run the configuration checker and it should not complain anymore.

02 June 2009

Entity Framework 4.0 and POCO

One of the thing that annoyed me most in Entity Framework 1.0 was the lack of support for POCO. I like to use a specific vertical layer for entities, and I like those entities to have only properties and to be POCO to say it simply. The problem in EF 1.0 is that entities are forced to inherit from a class. I could also use the IPOCO interfaces but it was a lot of code for little benefit.
The great thing I love in EF 4.0 (even if it is a beta) is that I can generate the edmx file without generating the classes. So basically, I have a EDMX file containing all the XML stuff (conceptual model, physical model and mappings) and I create my classes that Object Services will use. That way, I can put real POCOs in my entity layer.

This is an entity that I can create and use with EF (and the corresponding EDMX) :
public class Client
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}

EF will manage the related entities the same way it does with generated entities. That means, you can also benefit from the lazy-loading or deferred-loading mecanism, and change tracking.

As a side note, EF 4.0 nows supports complex types (even in the designer).

29 May 2009

WCF tuning tips

To obtain significantly better response time and decreased the load on the service, you apply a set of best practices depending on your needs.
1. If you do not need sessions in your services, you may want to disable them to reduce the memory consumption of the service.
2. If you are transfering large amounts of data between client and server, the minimum is to enable MTOM enconding. MTOM is an optimized encoding for transmitting binary data. And even better than MTOM, you can also use streaming for the data transfers. Streaming avoids loading the complete message in memory which is what happens when you do not use streaming. Performance will be vastly increased when dealing with large amounts of binary data.
3. If you have control over client and server, you may also want to choose a more efficient but less interoperable binding (like NetTcpBinding for example). This will avoid the overhead that comes with all the WS-* protocols.
4. Be carefull when modifying the instance and concurrency mode. A single instance and a single thread will avoid concurrency issues but will only serve one request at a time. Multiple instances and multiple threads per instances will enable much more requests to be processed simultaneously but it will need a really good concurrency management system. Depending on the constraints, the "good" solution lies between those two models.

These are the basic checks you can apply on your services.
Happy coding :)

14 May 2009

Databinding and XtraReport

I had a problem recently using object data sources in my XtraReports. I was assigning an object hierarchy to the DataSource property and was getting weird exceptions.
The problem is XtraReport does not handle well one object as a data source, it prefers to have a collection of objects.
The simple fix was to use a BindingSource as the data source and assign my object to the BindingSource's DataSource property. And yes, I should have been using a BindingSource from the start, I know :)