WCF服务引用调用返回“远程服务器返回错误:NotFound。”

问题描述:

我正在拉我的头发在这一个。WCF服务引用调用返回“远程服务器返回错误:NotFound。”

我有一个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接口。

EDIT 2 ::

原来,问题是使用枚举作为字段(的ItemType)。如上所示,我将ItemType作为已知类型。在这种类型中是否存在特殊情况?这是减速。

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

我觉得这是因为我返回类型RmaItem。这是返回这个类型的第一个函数,也是唯一有问题的函数。我在想什么? – JeremyK

已解决。

我错过了ItemType enumaration中每个值的EnumMember。

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

谢谢你的回应McAden

Silverlight不理解所有错误。问题不在于服务器返回“未找到”,而是Silverlight试图查找wcf返回的错误,并且找不到它。

您可以按照如this的方法找出更多的信息,或使用像Fiddler这样的数据包嗅探器。