What’s new in .NET 4.5? [Poster]
Found this poster for the new features in .NET 4.5 from Jouni’s blog so decided to share
Found this poster for the new features in .NET 4.5 from Jouni’s blog so decided to share
Adnan Masood reviewer of Hammad and Rick’s Windows Server AppFabric Cookbook shared that the book is available on Safari Books online, though like him I am awaiting my dead-tree copy too but it’s nice to see it available for anyone with Safari Books subscription.
Around mid last year I was invited by my friend Hammad Rajjoub to be the technical reviewer of the Windows Server AppFabric Cookbook that he was co-authoring with Connected Systems MVP Rick Garibay. I am glad to tell you that the book is now published and is coming to stores near you and in addition to that you can order it online on Amazon, Amazon UK, B&N.
This is not a long post that talks about every aspect of the book because the authors have don
e a great job explaining the details but as a technical reviewer of the book I just want to tell you that if you are a .NET developer,Team Lead or Software Architect and are considering or using Windows Server AppFabric’s Caching, WCF and Workflow capabilities in your enterprise than this book is for you, the book is written in the recipe-format so its not going to waste your time but leave you with just the information that you need.
Click to the authors blogs below for full details of the book.
I am building a Service using the WCF REST Starter Kit. This Service contains a method that accepts a complex type as input, it then deserializes the object into it’s concrete type.
Here’s how a service call looks like
using (HttpClient client = new HttpClient()){ RequestObject req = new RequestObject { FirstName = "John", LastName = "Doe", Email="johndoe@somecompany.com"}; HttpContent body = HttpContentExtensions.CreateXmlSerializable<RequestObject>(req); HttpResponseMessage resp = client.Post("http://localhost:1575/Web/Service.svc/SendMail", body); Response.Write(resp.Content.ReadAsString());}
What the above does is simply prepare a RequestObject, call a SendMail method on the service using the HttpClient, read and print the response, nothing fancy.
Here’s how the service looks like
[WebHelp(Comment = "Sample description for SendMail")][WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat =WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml,UriTemplate = "SendMail")][OperationContract]public RequestObject SendMail(RequestObject request){ return new RequestObject() { FirstName = request.FirstName, LastName = request.LastName,Email = request.Email }; }
Notice what I’m doing is preparing the same RequestObject and simply pass it as the response.
As you’d expect I’m suppose to get the following response in the browser.
- <RequestObject> <FirstName>John</FirstName> <LastName>Doe</LastName> <Email>johndoe@somecompany.com</Email> </RequestObject>
But the response I receive is similar to this
<RequestObject> <FirstName i:nil="true" /> <LastNameName i:nil="true" /> <Email>johndoe@somecompany.com</Email></RequestObject>
After a few hours of trying it occurred to me that XML Serialization is done in the alphabetical order if no ordering is specified even if the properties in the class are not in the alpha-order. (arrgh. If only I had used the Paste XML as Type as demo’ed in this screencast by Aaron Skonnard)
So to make it work I had to change the RequestObject class in both places to look like the following.
public class RequestObject{ public string Email { get; set; } public string FirstName { get; set; } public string LastName { get; set; }}
I was facing this problem recently in a project when adding a reference to a WCF Service simply gave me this error.
I google’d it for a while but in vain, I also removed the auto-gen service entries from the web.config but that did not work either.
Then I realized that earlier I had deleted the Service References folder from the application root, re-add and it worked as expected.
Funny thing is that Visual Studio will not tell you what went wrong, neither folder name appears under Add > ASP.NET Folders nor Visual Studio attempts to recreate it.