From last couple of days I was trying to call a ajax enabled wcf service method with the help of jquery. But each and every time I am getting the error code 12031 returned by the service. I did googling for this error but I was unable to find the solution. After spending much time on R&D, I found the reason why I wa geeting this error.
In this article, I am going to share my experience with you so that you will be able to resolve this error in ajax enabled wcf service. I have the below service and code for calling wcf.
WCF Service
namespace WCFBAL
{
[DataContract]
public class Employee
{
[DataMember]
public int EmpID;
[DataMember]
public string Name;
[DataMember]
public int Salary;
[DataMember]
public DateTime JoiningDate;
}
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WCFBALService
{
[WebInvoke(Method = "POST")]
public Employee GetEmpInfo(int mEmpID)
{
try
{
//suppose you have a list of employee like as in the database
List lst = new List()
{
new Employee { EmpID = 1, Name = "Deepak", Salary = 12000, JoiningDate = Convert.ToDateTime("11/05/2011") },
new Employee { EmpID = 2, Name = "Mohan", Salary = 18000},
new Employee { EmpID = 3, Name = "Mohan", JoiningDate = Convert.ToDateTime("06/10/2011") }
};
var q = lst.Where(m => m.EmpID == mEmpID).FirstOrDefault();
Employee mobjEmp = new Employee();
if (q != null)
{
mobjEmp.EmpID = q.EmpID;
mobjEmp.Name = q.Name;
mobjEmp.Salary = q.Salary; // comment this line to expect same error
//The no error will be raised since "Salary" field is of int type and default value of int variable is "0", so zero value will be assigned to it.
mobjEmp.JoiningDate = q.JoiningDate; // comment this line and provide mEmpID=1 to raise error
//The error will be raised since "JoiningDate" field is not being serialized because this of DateTime and this has no default value and not assign any value to it.
}
return mobjEmp;
}
catch (Exception mex)
{
return null;
}
}
}
}
WCF Service Method Calling Code
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script type="text/javascript">
$('#btn').live('click', function () {
// debugger;
var value = $('#txtEmpID').val();
if (value != '') {
var strJSONFilterCriteria = '{"mEmpID":"' + value + '"}';
$.ajax({ type: "POST", contentType: "application/json; charset=utf-8",
url: '<%=ViewState["WCFBalUrl"]%>' + '/GetEmpInfo',
data: strJSONFilterCriteria,
dataType: "json",
error: function (msg) {
// debugger;
alert('Service call failed: ' + msg.status + ' Type :' + msg.statusText);
},
success: function (msg) {
//debugger;
var str = "Emp ID:" + msg.d.EmpID + "\n";
str += "Emp Name:" + msg.d.Name + "\n";
str += "Emp Salary:" + msg.d.Salary + "\n";
//str += "JoiningDate:" + new Date(parseInt(msg.d.JoiningDate.substr(6))) + "\n";
alert(str);
} }); }
return false;
});
</script>
<h2>
WCF Error Code 12031
</h2>
<p>
To learn more about Dot Net Tricks visit <a href="http://www.dotnet-tricks.com" title="Dot Net Tricks ">
www.dotnet-tricks.com</a>.
</p>
<p>
Enter Employee ID (1-3)
</p>
<p>
<asp:TextBox ID="txtEmpID" runat="server" ClientIDMode="Static"></asp:TextBox>
<asp:Button ID="btn" runat="server" Text="Get Info" ClientIDMode="Static" />
</p>

Summary
I hope you will enjoy this trick while programming with Ajax enabled WCF. I would like to have feedback from my blog readers. Your valuable feedback, question, or comments about this article are always welcome.

