簡體   English   中英

C#WCF Web服務序列化錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM