簡體   English   中英

wcf rest json返回集合

[英]wcf rest json return collection

我正在嘗試構建一個Restful WCF服務 ,該服務JSON格式返回數據。 我的firsts方法工作正常,但是當我嘗試返回一個集合時,我的測試程序會收到下一個異常:

無法將數據寫入傳輸連接。 遠程主機強行關閉了現有連接。

我的服務代碼:

[ServiceContract]
public interface IService
{ 
  [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/GetModes")]
    OGetModesResponse OGetModes(OGetModesRequest oGetModes);
}
[DataContract]
public class OGetModesRequest
{
    private String m_sTicket;

    [DataMember]
    public String prTicket
    {
        get { return m_sTicket; }
        set { m_sTicket = value; }
    }
}

[DataContract]
public class OGetModesResponse
{
    [DataMember]
    public string sTicket;
    [DataMember]
    public emStatus emStatus;
    [DataMember]
    public IList<CTMode> aoModes;
}

而我的測試程序:

OGetModesRequest oGetModes = new OGetModesRequest { prTicket = sTicket };
ser = new DataContractJsonSerializer(typeof(OGetModesRequest));
mem = new MemoryStream();
ser.WriteObject(mem, oGetModes);
webClient = new WebClient();
webClient.Headers["Content-type"] = "application/json";
webClient.Encoding = Encoding.UTF8;
//Exception here
bData = webClient.UploadData("http://localhost:26104/Service.svc/GetModes", "POST", mem.ToArray()); 
stream = new MemoryStream(bData);
obj = new DataContractJsonSerializer(typeof(OGetModesResponse));
OGetModesResponse OResultModes = obj.ReadObject(stream) as OGetModesResponse;

我調試了我的服務,並且工作正常。 會發生什么事?

感謝幫助。

編輯(解決方案):CTMode是管理對象使用的類,我使用NHibernate獲取該類,因此我創建了一個可序列化的新類,稱為CMode

[DataContract]
public class OGetModesResponse
{
    [DataMember]
    public string sTicket;
    [DataMember]
    public emStatus emStatus;
    [DataMember]
    public IList<CMode> aoModes;
}
[Serializable]
public class CMode
{
    public Int32 nId;
    public Int32 nCode;
    public String sName;
}

嘗試檢查內部異常並在服務器上添加一些日志記錄/跟蹤。

您(一般)錯誤的可能性很小,因為您可能不了解內部異常:

  • 對象CTMode缺少DataContract,DataMember屬性。
  • 對象CTMode是缺少屬性或具有無法序列化的不正確值的枚舉
  • 先前的連接未正確關閉
  • 途中有一個代理服務器,您需要繞過它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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