Feb 4, 2011

Serialize and Deserialize object to DB / XElement


//To serialize into XElement:

        XmlSerializer x = new XmlSerializer(typeof(ComplexType));
        XDocument doc = new XDocument();
ComplexType ct = _getComplexType();
using (XmlWriter xw = doc.CreateWriter())
{
ComplexType ct = _getComplexType();
x.Serialize(xw, complexType);
xw.Close();
}
XElement el = doc.Root;

//To deserialize into ComplexType:

        using (XmlReader xr = el.CreateReader())
        {
            ComplexType deserializedComplexType =
x.Deserialize(xr) as ComplexType;
            xr.Close();
        }

Feb 3, 2011

Exposing unreferenced data types via WCF service

For example, need to expose an enumeration that is not used by any of the WCF service operations to the client (via WSDL).

While ServiceKnownType attribute on the service class/interface/method exposed the type in the XSD schema of the WSDL, the default client proxy generation does not generate code for it.

Eventually ended up with a dummy solution of having a dummy method:


public class ExposedDataTypes
{
public CustomType1 type1 { get; set; }
public CustomType2 type2 { get; set; }
}



ExposedDataTypes IService.Ignore()
{
return null;
}


Not the best solution, but couldn't gracefully work around it. Easy and works nicely though.

Jan 31, 2011

WCF Service over HTTPS / SSL with basicHttpBinding


  1. In IIS, set "Require secure channel (SSL)" option for the site / virtual directory.

  2. In web.config, set <bindings><basicHttpBinding><binding...><security mode="Transport">.

  3. In web.config, set <system.serviceModel><behaviors><serviceBehaviors><behavior...><serviceMetadata httpsGetEnabled="true"/>

Jan 19, 2011

.NET System.Diagnostics.Stopwatch may be wrong

The .NET System.Diagnostics.Stopwatch timer is a software based timer and it will not count while device is in sleep mode as CPU is not running. Only less accurate real time clock will keep running.

Found this when timing a long web service call. Suppose this is the case for operations not using full CPU ticks.

Example code:

Console.WriteLine("start...");
var sw = System.Diagnostics.Stopwatch.StartNew();
System.Threading.Thread.Sleep(5000);
sw.Stop();
Console.WriteLine(string.Format("Elaped: {0} ({1} ms)", sw.Elapsed, sw.ElapsedMilliseconds));


May results in something like:

start...
Elaped: 00:00:02.3029859 (2302 ms)