2012-09-06 68 views
0

我正在拉我的頭髮在這一個。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

回答

0

已解決。

我錯過了ItemType enumaration中每個值的EnumMember。

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

謝謝你的迴應McAden

2

Silverlight不理解所有錯誤。問題不在於服務器返回「未找到」,而是Silverlight試圖查找wcf返回的錯誤,並且找不到它。

您可以按照如this的方法找出更多的信息,或使用像Fiddler這樣的數據包嗅探器。

相關問題