91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WCF-005:關于 WCF 基礎連接已經關閉 連接被意外關閉-不是使用父類指向子類問題

發布時間:2020-07-26 07:47:57 來源:網絡 閱讀:438 作者:yangyoushan 欄目:編程語言

基礎連接已經關閉 連接被意外關閉

又被我碰到。

有這樣一個場景,數據庫的表中有一個字段表示的是產品,但是這個產品的類型是不同的,也就是說屬性不同。為了方便管理因此都使用在該字段中了,使用clob類型,保存一段對應產品類的json的字符串。json的用法可能大家都比較熟悉。

于是我在服務端打算寫這樣幾個方法。

產品類的模型:

該類表示這個通用字段,

[DataContract]
  public class AbstractModel
  {
      private string id;
      [DataMember]
      public string ID
      {
          get { return id; }
          set { id = value; }
      }
  }

這個類表示產品1的結構,

[DataContract]
    public class ChildModel1:AbstractModel
    {
        private string child1ID;
        private string child1ProductName;
        [DataMember]
        public string Child1ID
        {
            get { return child1ID; }
            set { child1ID = value; }
        }
        [DataMember]
        public string Child1ProductName
        {
            get { return child1ProductName; }
            set { child1ProductName = value; }
        }
    }

這個類表示產品2的結構,

[DataContract]

public class ChildModel2

{

private string child2ID;


private string child2ProductName;


[DataMember]

public string Child2ID

{

get { return child2ID; }


set { child2ID = value; }

}


[DataMember]

public string Child2ProductName

{

get { return child2ProductName; }


set { child2ProductName = value; }

}

}


服務方法如下,

契約接口,

[ServiceContract]
public interface IService1
{
    //該方法是為了客戶端能訪問到ChildModel1的結構
    [OperationContract]
    ChildModel1 DoGetChild1Model();
    [OperationContract]
    ChildModel2 DoGetChild2Model();
    //該方法是為了讓AbstractModel可以表示不同的產品模型
    [OperationContract]
    AbstractModel DoGetProduct();
}

實現,

public class Service1 : IService1
   {
       public ChildModel1 DoGetChild1Model()
       {
           ChildModel1 child1 = new ChildModel1();
           child1.Child1ID = "child1";
           child1.Child1ProductName = "產品1";
           return child1;
       }
       public ChildModel2 DoGetChild2Model()
       {
           ChildModel2 child2 = new ChildModel2();
           child2.Child2ID = "child2";
           child2.Child2ProductName = "產品2";
           return child2;
       }
       public AbstractModel DoGetProduct()
       {
           ChildModel1 child1 = new ChildModel1();
           child1.Child1ID = "child1";
           child1.Child1ProductName = "產品1";
           AbstractModel abmodel = child1;
           return abmodel;
       }
   }

創建wcf應用程序運行,顯示WCF調試工具界面

我們先分別運行獲取產品1和產品2的方法

WCF-005:關于 WCF 基礎連接已經關閉 連接被意外關閉-不是使用父類指向子類問題

WCF-005:關于 WCF 基礎連接已經關閉 連接被意外關閉-不是使用父類指向子類問題

都正確。

運行通過父類指向的獲取產品1的方法,

WCF-005:關于 WCF 基礎連接已經關閉 連接被意外關閉-不是使用父類指向子類問題

報錯


所以這種用法是行不通的,如果想要獲取兩個不同的產品,則需要定義兩個對應的產品字段,分別賦值了。

我的理解依然是序列化時出錯了,序列化時應該是序列化了子類,但是恢復時是按照父類的結構恢復的所以出現異常,反序列化失敗,造成了連接斷開。

測試代碼下載

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江陵县| 正定县| 绍兴市| 乐业县| 峡江县| 神木县| 宜阳县| 海口市| 蓬安县| 南充市| 新沂市| 平顺县| 和政县| 永仁县| 婺源县| 凌海市| 南宁市| 翁牛特旗| 哈密市| 雅安市| 扎兰屯市| 江北区| 新竹市| 安福县| 安陆市| 千阳县| 元江| 怀远县| 潜山县| 隆回县| 南溪县| 邵东县| 黔江区| 寿光市| 防城港市| 临湘市| 砀山县| 临安市| 玉龙| 信阳市| 法库县|