2012-05-22 16 views
1

在过去的一个月错误REST服务,我注意到一个奇怪的行为,其中错误的REST服务调用服务栈。调用ServiceStack

一切似乎是工作,然后当我添加一个新的REST服务,一些如何我的工作REST服务无法正常工作(即错误的REST服务调用)。

我会解释我是如何有我datacontracts对于这可以解释为什么我得到这个问题的服务。

我最初有:

[DataContract(Name = "MyService", Namespace = "")] 
[RestService("/api/v1/dvbs/{ServiceName}", "GET", "application/xml")] 
public class GetServiceDto 
{ 
    [DataMember(Name = "SessionId", Order = 1)] 
    public string SessionId { get; set; } 
    [DataMember(Name = "UserName", Order = 2)] 
    public string UserName { get; set; } 
    [DataMember(Name = "ServiceName", Order = 3)] 
    public string ServiceName { get; set; } 
} 

和我经过相同的数据(会话ID,用户名和服务名)在我所有的电话,任何新的服务作为开始:

[DataContract(Name = "MyService", Namespace = "")] 
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")] 
public class GetTunersDto : GetServiceDto 
{ 
} 

正如我提到这一切都工作正常,但当我添加一个新的服务,当我打电话给“api/v1/dvbs/{ServiceName}服务”api/v2/dvbs/{ServiceName} /调谐器“将被调用。删除了继承关系,使我有:

[DataContract(Name = "MyService", Namespace = "")] 
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")] 
public class GetDvbConfigTunersDto 
{ 
    [DataMember(Name = "SessionId", Order = 1)] 
    public string SessionId { get; set; } 
    [DataMember(Name = "UserName", Order = 2)] 
    public string UserName { get; set; } 
    [DataMember(Name = "ServiceName", Order = 3)] 
    public string ServiceName { get; set;} 
} 

它现在工作正常。

奇怪的是它是工作的罚款,只有当我在以后的日子增添了新的服务,错误映射发生。

任何想法?

回答

3

只能有每服务1个请求DTO和继承请求DTO的继承属性的路由,这使得它GetTunersDto继承相同的路线为GetServiceDto其填充ServiceStack相互矛盾和暧昧路线。

的解决方案是在DTO的(特别是更多的DTO)不使用继承。

+0

谢谢,我会记住的。 –