Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

aceswildab1

macrumors newbie
Original poster
Jun 29, 2012
1
0
0 down vote favorite


The get works fine and able to post to the database with a test winform app but getting a error 400 from the IIS log when trying to do a POST from iOS app. This is the IIS log 2012-06-28 12:13:39 192.168.100.112 POST /JsonWcfService/GetEmployees.svc/json/updateuser - 58129 - 192.168.100.231 WcfTest/1.0+CFNetwork/548.0.3+Darwin/11.4.0 400 0 0 4163 I think there is something wrong with the format I'm sending to the WCF service but I'm very new to iOS Dev.

This is the WCF service code
Code:
[OperationContract]
    [WebInvoke(Method = "POST",
       ResponseFormat = WebMessageFormat.Json,
       RequestFormat = WebMessageFormat.Json,
       BodyStyle = WebMessageBodyStyle.Wrapped,
       UriTemplate = "json/updateuser")]
    //method
     Employee PostEmp(Employee emp);    

[DataContract]
public class Employee
{
    [DataMember]
    public string firstname { get; set; }
    [DataMember]
    public string lastname { get; set; }
    [DataMember]
    public decimal salary { get; set; }
    [DataMember]
    public int idkey { get; set; }
    public Employee()
    {

    }
}

public Employee GetEmp(int IDKey)
{
    Employee emp = new Employee();

    using (EmpDBEntities empContext = new EmpDBEntities())
    {
        var j = (from t in empContext.EMPKeys where t.IDKey == IDKey select t).FirstOrDefault();
        emp = (new Employee(j.FirstName, j.LastName, j.Salary, j.IDKey));
        return emp;
    }
 }

xcode was taken from another posting on stackoverflow.com

NSArray *keys = [NSArray arrayWithObjects:@"idkey", @"firstname", @"lastname",@"salary", nil];
NSArray *objects = [NSArray arrayWithObjects:@"1", @"jim", @"jones", @"450",nil];
NSData *__jsonData = nil;
NSString *__jsonString = nil;
NSURL *url = [NSURL
URLWithString:@"http://<ip address>/JsonWcfService/GetEmployees.svc/json/updateuser"];

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

if([NSJSONSerialization isValidJSONObject:jsonDictionary])
{
    __jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:nil];
    __jsonString = [[NSString alloc]initWithData:__jsonData encoding:NSUTF8StringEncoding];
}

// Be sure to properly escape your url string.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody: __jsonData];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [__jsonData length]] forHTTPHeaderField:@"Content-Length"];

NSError *errorReturned = nil;
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned];

if (errorReturned) {
    // Handle error.
}
else
{
    NSError *jsonParsingError = nil;
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError]; }
 
Last edited by a moderator:

PhoneyDeveloper

macrumors 68040
Sep 2, 2008
3,114
93
Glancing at your code I don't see a problem. You might want to get a packet trace so you can see exactly what's going over the wire.

Go to the Documentation tab in the Organizer window and type in:

packet trace

There are a number of ways to do that. Usually you see the problem when you look at that level.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.