У меня странная проблема, связанная со службой данных 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");
}
Я получу результаты, как и ожидалось.Я в недоумении относительно того, что представляет собой недостающий фрагмент моей головоломки, поэтому любые указатели были бы действительно полезны.
С уважением