0

私はこれで髪を引っ張っています。

Web サーバーでの呼び出し用の WCF インターフェイスがあります。他のすべての機能は正常に動作していますが、追加した新しい機能は「リモート サーバーがエラーを返しました: NotFound.」という結果になります。End 関数の Reference.cs 自動生成ファイル。

サーバーが見つかったことはわかっています。サービス側でデバッガーが壊れており、明らかに呼び出されて正しいタイプを返しています。

他に何がこの誤解を招くエラーを引き起こす可能性がありますか?

[ServiceContract]
public interface IDatabaseQueries
{
...
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginGetItemFromId(int itemID, AsyncCallback callback, Object state);

    RmaItem EndGetItemFromId(IAsyncResult result);
...
}

[DataContract]
[KnownType(typeof(ItemType))]
[KnownType(typeof(Location))]
[KnownType(typeof(DateTime))]
public class RmaItem
{
...
}

[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[KnownType(typeof(RmaItem))]
[KnownType(typeof(RmaReport))]
public class DatabaseService : IDatabaseQueries
{
...
public IAsyncResult BeginGetItemFromId(int itemID, AsyncCallback callback, Object state)
{
    return new DatabaseResponse(itemID);
}

public RmaItem EndGetItemFromId(IAsyncResult result)
{
    return GetRmaItemById((int)(result as DatabaseResponse).GetData);
}
...
}

「Reference.cs」でのクラッシュ:

public RMA.DatabaseServiceReference.RmaItem EndGetItemFromId(System.IAsyncResult result) {
                object[] _args = new object[0];
                RMA.DatabaseServiceReference.RmaItem _result = ((RMA.DatabaseServiceReference.RmaItem)(base.EndInvoke("GetItemFromId", _args, result)));
                return _result;

編集:

他のすべての関数とは、追加の関数が同じ IDatabaseQueries インターフェイスであることを意味します。

編集2::

Enum をフィールド (ItemType) として使用していたことが問題であることが判明しました。上記のように、既知のタイプとして ItemType があります。そのタイプに欠けている特別な条件はありますか?こちらが減速です。

[DataContract]
public enum ItemType
{
    LOCATION, PART, ASSEMBLY
}
4

2 に答える 2

2

Silverlightはすべてのエラーを理解しているわけではありません。問題は、サーバーが「Not Found」を返していることではなく、Silverlightがwcfが返したエラーを検索しようとしていて、それを見つけることができないことです。

このような方法に従って、詳細を確認したり、Fiddlerなどのパケットスニファを使用したりできます。

于 2012-09-06T18:01:33.843 に答える
0

解決しました。

ItemType 列挙の各値を持つ EnumMember がありませんでした。

    [DataContract]
    public enum ItemType
    {
        [EnumMember]
        LOCATION,
        [EnumMember]
        PART,
        [EnumMember]
        ASSEMBLY
    }

返信ありがとうございます。

于 2012-09-06T18:08:31.233 に答える