1

私はかなり単純なServiceStackサービスを試していて、メタデータURL(/ xml / metadata?op = Foo、/ json / metadata?op)にアクセスすると、System.InvalidOperationException(「シーケンスに複数の一致する要素が含まれています」)を取得し始めました。 = Fooなど)特定のDTOの場合。

DTOは次のとおりです。

[DataContract]
[Route("/foo/{Id}", "PUT")]
public class Foo : IReturn<Foo>, IHasId
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }

    public Foo() {}
}

そして、サービスは次のとおりです。

public class FooService : Service
{
    private static readonly List<Foo> items = new List<Foo>
    {
        new Foo { Id = 1, Name = "Foo" },
        new Foo { Id = 2, Name = "Bar" }
    };

    public virtual object Put(Foo request)
    {
        var itemToUpdate = items.Find(p => request.Id == p.Id);

        if (itemToUpdate == null)
            throw new HttpError(System.Net.HttpStatusCode.NotFound,
                new ArgumentException(String.Format("{0} with Id {1} does not exist.", typeof(Foo).Name, request.Id)));

        itemToUpdate.PopulateWith(request);

        return request;
    }
}

これを分離するために、他のすべてのDTOとサービスをコメントアウトしました。これは、ServiceStackのBaseMetadataHandler.csのProcessOperations呼び出しから発生しているようです。具体的には、次のとおりです。

var operationType = allTypes.Single(x => x.Name == operationName);

ここで重複する操作(同じ名前の複数の操作)が発生する理由がわかりません。何か案は?

4

1 に答える 1

2

これは、3.9.33より前のServiceStackの問題のようです。アップグレードすると、問題は解決しました。

于 2013-01-07T16:04:14.387 に答える