1

在过去的一个月里,我注意到一个奇怪的行为,即使用服务堆栈调用了错误的 REST 服务。

一切似乎都在工作,然后当我添加一个新的 REST 服务时,我的工作 REST 服务无法正常工作(即调用了错误的 REST 服务)。

我将解释我如何拥有服务的数据合同,这可以解释我遇到问题的原因。

我最初有:

[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; }
}

当我在所有调用中传递相同的数据(sessionid、用户名和服务名)时,任何新服务都以:

[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}/tuners”将被调用。

我删除了继承关系,以便我拥有:

[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;}
}

现在工作正常。

奇怪的是它工作正常,只有当我稍后添加新服务时才会出现错误的映射。

有任何想法吗?

4

1 回答 1

3

每个服务只能有 1 个请求 DTO,并且继承请求 DTO 继承属性路由,这使得GetTunersDto继承与GetServiceDto相同的路由,后者使用冲突和不明确的路由填充 ServiceStack。

解决方案是不要在 DTO(尤其是请求 DTO)上使用继承。

于 2012-05-22T19:56:33.070 回答