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

时间:2012-09-06 17:47:41

标签: c# wcf silverlight web-services

我把头发拉过这一头。

我有一个WCF接口,用于Web服务器上的调用。所有其他功能都正常工作,但我添加的新功能导致“远程服务器返回错误: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
}

2 个答案:

答案 0 :(得分:2)

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

您可以按照this之类的方法查找更多信息或使用Fiddler之类的数据包嗅探器。

答案 1 :(得分:0)

解决。

我错过了EnumMember,其中包含了ItemType枚举中的每个值。

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

感谢您回应McAden