Domanda

Nell'ultimo mese ho notato un comportamento dispari in cui il servizio di riposo errato viene chiamato con lo stack di servizio.

Tutto sembra funzionare e poi quando aggiungo un nuovo servizio di riposo, alcuni come il mio servizio di riposo funzionante non funziona correttamente (cioè viene chiamato il servizio di riposo errato).

Spiegherò come ho i miei datacontracts per i servizi che potrebbero spiegare perché sto ottenendo il problema.

Inizialmente ho avuto:

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

E mentre stavo passando gli stessi dati (SessionID, Nome utente e Servicename) In tutte le mie chiamate, qualsiasi nuovo servizio è iniziato come:

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

Come ho detto questo tutto ha funzionato bene ma quando ho aggiunto un nuovo servizio, quando ho chiamato "API / V1 / DVBS / {Servicename} Il servizio" API / V2 / DVBS / {Servicename} / sintonizzatori "sarebbe chiamato.

Ho rimosso la relazione ereditata in modo che io abbia:

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

E funziona bene ora.

Ciò che è strano è lavorare bene e solo quando ho aggiunto un nuovo servizio in una data successiva che la mappatura sbagliata è stata sostenuta.

Qualche idea?

È stato utile?

Soluzione

È possibile avere solo 1 richiesta DTO per servizio e richiesta di ricambio DTO eredita i percorsi dell'attributo che lo rende Gettunersdto eredita gli stessi routini come Gethervicedto che popola il ServiceStack con conflitto ePercorsi ambigui.

La soluzione non utilizzare l'ereditarietà su DTO (in particolare la richiesta DTO).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top