Служба данных WCF - проблемы iOS oData SDK - PullRequest
0 голосов
/ 21 марта 2011

У меня странная проблема, связанная со службой данных CF WCF и клиентом iOS (с использованием oData SDK).

Вот упрощенная версия моей службы данных WCF:

using System;
using System.Data.Services;
using System.Data.Services.Common;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Web;
using FootballFeedsModel;

[ServiceBehavior]
public class FootballFeeds : DataService<FootballFeedsEntities > {
    // This method is called only once to initialize service-wide policies.
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("TeamsList", ServiceOperationRights.All);

        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
    [WebGet (ResponseFormat = WebMessageFormat.Json)]
    public IQueryable<Team> TeamsList(){
        return new FootballFeedsEntities().Teams.AsQueryable();
    }
}

Сервисы в настоящее время размещаются в режиме реального времени, поэтому я могу подтвердить, что могу просматривать их, перемещаться по коллекции Entity и т. Д.

Я написал следующий код в своем приложении iOS просто для проверки соединения суслуга:

    FootballFeedsEntities *proxy = [[FootballFeedsEntities alloc] 
    initWithUri:@"http://testwebserver.com/Services/FootballFeeds.svc" 
credential:nil];

        DataServiceQuery *query = [proxy teams];

        QueryOperationResponse *response = [query execute];

            resultArray =[[response getResult] retain];

        if([resultArray count] > 0 )
            {
            NSLog(@"Got Results");
        }

Однако после получения кода состояния 200 соединение просто зависает (в базе данных всего 5 элементов, поэтому я знаю, что это не проблема с размером данных).

Однако, если я изменю код для чтения из службы oData Northwind (и добавлю файлы для этой службы, созданные odatagen)

    NorthwindEntities *proxy = [[NorthwindEntities alloc]
 initWithUri:@"http://services.odata.org/Northwind/Northwind.svc"
 credential:nil];

    DataServiceQuery *query = [proxy teams];

    QueryOperationResponse *response = [query execute];

    resultArray =[[response getResult] retain];
    NSLog(@"Got Results");
    if([resultArray count] > 0 )
    {
        NSLog(@"Got Results");
    }

Я получу результаты, как и ожидалось.Я в недоумении относительно того, что представляет собой недостающий фрагмент моей головоломки, поэтому любые указатели были бы действительно полезны.

С уважением

1 Ответ

0 голосов
/ 25 марта 2011

Отвечая на свой вопрос, я исправил код, просто изменив приведенное ниже, добавив сюда, если у кого-то есть такая же проблема.

[WebGet(ResponseFormat = WebMessageFormat.Json)] 
public static void InitializeService(DataServiceConfiguration config)     { 
    config.SetEntitySetAccessRule("*", EntitySetRights.All);   
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
 } 
...