2012-05-22 2 views
1

За последний месяц я заметил странное поведение, когда неправильная служба REST вызывается с помощью стека служб.Неверный сервис Rest вызван с ServiceStack

Кажется, что все работает, а затем, когда я добавляю новый сервис 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, имя пользователя и SERVICENAME) во всех моих звонках, любая новая услуга началась как:

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

В I упомянутое это все работало нормально, но когда я добавил новую услугу, когда я назвал «api/v1/dvbs/{ServiceName}, будет вызвана услуга« api/v2/dvbs/{ServiceName}/tuners ».

I удалены унаследованные так что у меня есть:

[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 за обслуживание и наследуя запроса DTOs наследует атрибут маршрутов, что делает его GetTunersDto наследуют те же маршруты, как GetServiceDto который заполняет ServiceStack с противоречивыми и неоднозначными путями.

Решение состоит в том, чтобы не использовать наследование на DTO (особенно запрашивать DTO).

+0

Спасибо, я запомню это. –

Смежные вопросы