[英]c# WCF web service serialization error
我在這里做錯了什么? 我正在嘗試創建訪問不同dll項目的WCF Web服務。 返回是一個包含字符串和整數的自定義列表。 調試時,僅導航到Service1.svc時出現以下錯誤:
可能由IncludeExceptionDetailInFaults = true創建的ExceptionDetail,其值為:System.InvalidOperationException:WSDL導出擴展的調用中引發了異常:System.ServiceModel.Description合同: http ://tempuri.org/: IService1- -> System.Runtime.Serialization.InvalidDataContractException:類型'RoTools.RoAmCalls + CustomItem'無法序列化。 考慮使用屬性標記它,並使用DataMemberAttribute屬性標記要序列化的所有成員。 如果類型是集合,請考慮使用CollectionDataContractAttribute對其進行標記。 有關其他受支持的類型,請參閱Microsoft .NET Framework文檔。
因此,我在線研究錯誤,我認為添加KnownType會有所幫助,但是我仍然遇到相同的錯誤。 謝謝你的幫助。 這是來自Service1.cs的代碼。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace RoWebService
{
[ServiceContract]
public interface IService1
{
[OperationContract]
List<RoTools.RoAmCalls.CustomItem> SingleProductCheck(string productId);
}
[KnownType(typeof(RoTools.RoAmCalls.CustomItem))]
[DataContract]
public class CompositeType
{
List<RoTools.RoAmCalls.CustomItem> myResults;
[DataMember]
public List<RoTools.RoAmCalls.CustomItem> myResults
{
get { return myResults; }
set { myResults = value; }
}
}
這是來自Service1.svc.cs的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace RoWebService
{
public class Service1 : IService1
{
public List<RoTools.RoAmCalls.CustomItem> SingleProductCheck(string productId)
{
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
var myReturn =
RoTools.RoAmCalls.GetPriceAndStatusSingleItem(productId, log, System.Configuration.ConfigurationManager.AppSettings["something1"],
System.Configuration.ConfigurationManager.AppSettings["something2"]);
return myReturn;
}
}
}
WCF中使用的所有用戶定義類型(在本例中為RoTools.RoAmCalls.CustomItem
)都必須標記為[DataContract]
屬性。 其成員必須標記有[DataMember]
屬性。
用[DataContract]
屬性標記RoTools.RoAmCalls.CustomItem
或考慮創建一個單獨的類,該類將存儲RoTools.RoAmCalls.CustomItem
的數據並將通過WCF傳遞。
您能否將Composite類替換為:
[DataContract]
public class CompositeType
{
[DataMember]
public List<RoTools.RoAmCalls.CustomItem> myResults { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.