我正在拉我的頭髮在這一個。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
}
我覺得這是因爲我返回類型RmaItem。這是返回這個類型的第一個函數,也是唯一有問題的函數。我在想什麼? – JeremyK