WCF GET方法未获取iOS客户端的最新数据

zic10

我的WCF服务和iOS客户端出现了一种奇怪的情况,我不确定到底发生了什么。问题是,如果我使用WCF POST方法在客户端中添加数据,然后调用GET从该表中获取所有数据,则POST中的所有数据都不会返回给客户端。为了进一步说明:

  1. 假设表用户有一个用户John
  2. 我调用GET方法从表中获取所有用户。
  3. 约翰出现在我的iOS客户端中。
  4. 现在我从iOS客户端发布信息,添加了用户Mike
  5. Mike出现在数据库中,并且POST成功。
  6. 我再次为所有用户调用GET方法,但是这次Mike没有出现在响应中,只有John出现了。

我还注意到,如果我从iPhone中删除该应用程序,然后使用Xcode将其添加回去,然后运行GET方法,则将返回Users表中的所有数据。我不确定数据是否缓存在某个地方或什么地方。我怀疑问题可能出在我的客户端代码如何运行GET上,但我不确定,这也可能是我的服务器代码。这是下面的代码。

// WCF服务代码

//IService.cs

  [OperationContract]
        [WebInvoke(Method ="GET", ResponseFormat= WebMessageFormat.Json, BodyStyle= WebMessageBodyStyle.WrappedResponse, UriTemplate = "/GetUsers")]
        string GetMyUsers();

[OperationContract]
    [WebInvoke(Method = "POST", RequestFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/NewUser")]
    string AddNewUser(NewUser newUser);


[DataContract]
public class NewUser
{
    [DataMember(Name="name")]
    public string name { get; set; }



    [DataMember(Name="age")]
    public string age { get; set; }
}

//Service1.svc.cs

 public  string AddNewUser(NewUser newUser)
        {

            var userController = new UserController();

            userController.AddNewUser(newUser.name, newUser.age);

            return "Method Call Complete";
        }

   public string GetMyUsers()
        {
            var userController = new UserController();

            string returnString = userController.GetAllUsers();

            return returnString;
        }

//UserController.cs

  public string GetAllUsers()
        {
            using(var db = new EmployeesEntities1())
            {
                string returnString = string.Empty;

                List<User> userList = db.Users.ToList();

                JavaScriptSerializer jss = new JavaScriptSerializer();

                returnString = jss.Serialize(userList);

                return returnString;
            }
        }

// IOS客户端GET

NSString *restCallString = [NSString stringWithFormat:@"http://myPublicIP/MyService/Service1.svc/GetUsers"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:restCallString]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSError *error = nil;
NSURLResponse *response = nil;

NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSDictionary *jsonArray=[NSJSONSerialization JSONObjectWithData:result options:0 error:nil];

NSString  *item = [jsonArray objectForKey:@"GetMyUsersResult"];

txtData.text = item;

// IOS客户端POST

  NSArray *propertyNames = [NSArray arrayWithObjects:@"name", @"age",nil];
    NSArray *propertyValues = [NSArray arrayWithObjects:@"Mike", @"23",nil];

    NSDictionary *properties = [NSDictionary dictionaryWithObjects: propertyValues forKeys:propertyNames];

    NSMutableDictionary *newUserObject = [NSMutableDictionary dictionary];

    [newUserObject setObject:properties forKey:@"newUser"];


    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:newUserObject options:kNilOptions error:nil];

    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

       NSString *urlString = [NSString stringWithFormat:@"http://myPublicIP/MyService/Service1.svc/NewUser"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    [request setValue:jsonString forHTTPHeaderField:@"json"];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:jsonData];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

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

    if(error)
    {
        txtData.text = [error localizedDescription];
    }

    else
    {
        NSMutableString *retVal = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    }

我还测试了在本地主机上运行的/ GetUsers方法,该方法始终将最新的用户列表从“用户”表返回到Web浏览器。问题似乎出在服务和客户端之间。我是Web服务的新手,任何帮助或建议都将不胜感激。

zic10

我相信我找到了一个解决方案,它与请求的缓存策略有关:

[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

将其添加到请求后,该请求将始终从数据库中获取最新数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Wcf数据服务客户端

来自分类Dev

使用 wsDualHttpBinding 在 WCF 中获取客户端 IP 地址

来自分类Dev

WCF流服务将数据推送到客户端

来自分类Dev

WCF服务将数据发送到客户端

来自分类Dev

WCF流服务将数据推送到客户端

来自分类Dev

无法在WCF客户端中使用WCF Rest Services

来自分类Dev

如何通过WCF测试客户端访问联合WCF?

来自分类Dev

WCF中的WCF服务引用未获取正确的方法类型

来自分类Dev

WCF中的WCF服务引用未获取正确的方法类型

来自分类Dev

用Structuremap注入WCF客户端的可能方法

来自分类Dev

方法未在WCF客户端中显示

来自分类Dev

WCF客户端错误处理

来自分类Dev

从服务访问WCF客户端凭据

来自分类Dev

在WCF客户端禁用证书验证

来自分类Dev

以编程方式创建WCF客户端

来自分类Dev

WCF:偶尔拒绝客户端凭据

来自分类Dev

Windows Portable 6.5的WCF客户端

来自分类Dev

使WCF DateTime与Java客户端兼容

来自分类Dev

WCF ASync ...客户端丢失的异常

来自分类Dev

WCF服务PHP客户端连接

来自分类Dev

如何关闭WCF客户端连接

来自分类Dev

客户端在WCF中生成的SessionID?

来自分类Dev

以编程方式创建WCF客户端

来自分类Dev

奇怪的 wcf .net 客户端行为

来自分类Dev

在 WCF 客户端中填充 XmlAnyAttribute

来自分类Dev

来自网站客户端的 WCF 授权

来自分类Dev

WCF 在客户端调用服务

来自分类Dev

将组合框选定的值传递给WCF,以从Silverlight 5 Pivot Viewer客户端获取数据

来自分类Dev

从WCF获取数据