私はこれで髪を引っ張っています。
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
}