2012-07-25 70 views
1

我试图用ServiceStack和Sitefinity V3.7sp3 net35实现一个简单的webservice。我使用这个网络config将ServiceStack添加为localhost/api。使用IService实现服务类以获取完整的项目新闻内容并注册路由的全局asax。结果总是零项。这与Sf论坛中的其他​​非常相似。更改ContentManager或者提供者总是返回零个零和零个数。我的SF允许多语言en,fr ..使用路径。许多人需要成为异步?当然可以有人帮助我使用服务堆来修复这个案例。ServiceStack和Sitefinity V3.7 webservices同步还是异步?

问候。

[Description("Find items by baseclass, or all default if no genre is provided")] 
[RestService("/api/items")] 
[RestService("/api/items/news")] 
[RestService("/api/items/news/{provider}")] 
[RestService("/api/items/news/{provider}/{language}")] 
[AspNetCompatibilityRequirements(RequirementsMode =  AspNetCompatibilityRequirementsMode.Allowed)] 
public class Items 
{ 
    public string provider { get; set; } 
    public string language { get;set; } 
    IList ItemsList{ get; set; } 
} 

/// <summary> 
/// Summary description for NewsResponse 
/// </summary> 
public class ItemsResponse 
{ 
    public ItemsResponse() 
    { 
    } 
    public ResponseStatus ResponseStatus { get; set; } //Automatic exception handling 
    public IList Items { get; set; }//return a list of objects 
} 

/// <summary> 
/// Summary description for NewsServices 
/// </summary> 
public class ItemsService : ServiceStack.ServiceHost.IAsyncService<Items> 
{ 
    //public object Execute(Items request)// with IService 
    //{ 
    // ItemsResponse response = new ItemsResponse(); 
    // response.Items = ItemsList(request.provider, request.language);//request.provider 
    // return response; 
    // ALWAYS ZERO AS RESPONSE 
    //} 

    //ERROR ON HANDLER ?  
    object IAsyncService<Items>.ExecuteAsync(Items request) 
    { 
     ItemsResponse response = new ItemsResponse(); 
     //if (request.provider != null) 
     response.Items = ItemsList(request.baseclass, request.provider, request.language);//request.provider 
     return response;  
    } 

    public IList ItemsList(string provider, string language) 
    {   
     if(provider==string.Empty) 
      provider = NewsManager.DefaultContentProvider; 
     if (language == string.Empty) 
      language = "es"; 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); 
     NewsManager manager = new NewsManager(provider); 
     //Get items from this language 
     IList data = manager.Content.GetContent(); 
     return data;      
    } 
} 

回答

0

取出/apiRestService()'s.所以像:

[RestService("/items")] 
[RestService("/items/news")] 
[RestService("/items/news/{provider}")] 
[RestService("/items/news/{provider}/{language}")] 

或者您的网址将不得不domain.com/api/api/items...

您有domain.com/api/metadata测试您的网站?

+0

嗨查克,这些路径的响应正在工作,包括元数据。问题不在于此,而在于回应零事件的回应。我已经评论了Sycn代码。就像NewsManager.Contents.GetContents()没有时间在Sync代码中做出响应一样。 – user325558 2012-07-25 15:30:29

+0

你删除了'request.provider'上的空检查,但可能没有补偿?首先将if改为if(string.IsNullOrEmpty(provider))provider = NewsManager.DefaultContentProvider' – 2012-07-25 23:06:50

+0

thks chuck我已经重写了代码但始终是相同的问题,没有项目被重新使用。我可以看到没有错误和项目[{}]的快照页面。这些提供者正在使用ContentManager或NewsManager进行工作和测试,但并没有回退任何东西。测试其他语言。我要求我是否需要一个Async来返回数据,但在这种情况下,我需要更多的帮助来使用servicestack.BR。 – user325558 2012-07-26 12:46:31