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.


0 comments:
Post a Comment
Note: only a member of this blog may post a comment.