先月、サービス スタックで間違った 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; }
}
そして、すべての呼び出しで同じデータ (セッション 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}/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;}
}
そして今はうまくいきます。
奇妙なことに、それは正常に機能していましたが、後日新しいサービスを追加したときにのみ、間違ったマッピングが発生しました。
何か案は?