您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“WCF的序列化問(wèn)題怎么解決”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“WCF的序列化問(wèn)題怎么解決”吧!
WCF 基礎(chǔ)連接已經(jīng)關(guān)閉: 連接被意外關(guān)閉。
這個(gè)錯(cuò)誤可能一不小心就會(huì)碰到??偨Y(jié)起來(lái)應(yīng)該有兩種情況導(dǎo)致:
1、傳輸數(shù)據(jù)過(guò)大。
第一種情況,可以采取修改本地引用服務(wù)生成的節(jié)點(diǎn)內(nèi)的屬性解決。
binding節(jié)點(diǎn)中maxReceivedMessageSize的值增大即可。不過(guò)一般不建議這樣使用,對(duì)于大批量數(shù)據(jù)可采取分頁(yè)讀取方式解決。因?yàn)榇笈繑?shù)據(jù)傳輸,影響傳輸速度并且容易出錯(cuò)。
2、傳輸類(lèi)中的屬性序列化問(wèn)題
這種情況我正好碰到過(guò)。如下,
服務(wù)端類(lèi)的是這樣的,其它屬性省略。
[DataContract] public class SDataModel { private string id; private DataTypeEnum type; [DataMember] public string ID { get { return id; } set { id = value; } } [DataMember] public DataTypeEnum Type { get { return type; } set { type = value; } } } [DataContract] public enum DataTypeEnum { [EnumMember] 類(lèi)型1 = 1, [EnumMember] 類(lèi)型2 = 2, [EnumMember] 類(lèi)型3 = 3, [EnumMember] 類(lèi)型4 = 4 }
當(dāng)時(shí)有一個(gè)方法只需要少量的屬性值就可以了,正好Type這個(gè)屬性時(shí)不需要的。所以
SDataModel model = new SDataModel();
model.ID = item.TBP_ID;
向客戶(hù)端傳輸model對(duì)象時(shí),沒(méi)有包含Type。于是就報(bào)錯(cuò)了,而且怎么也檢查不到,因?yàn)榉?wù)端執(zhí)行也正常,但是客戶(hù)端卻異常了。
修改就是,在定義該字段時(shí)賦初值,改為
[DataContract] public class SDataModel { private string id; private DataTypeEnum type=DataTypeEnum.類(lèi)型1; [DataMember] public string ID { get { return id; } set { id = value; } } [DataMember] public DataTypeEnum Type { get { return type; } set { type = value; } } } [DataContract] public enum DataTypeEnum { [EnumMember] 類(lèi)型1 = 1, [EnumMember] 類(lèi)型2 = 2, [EnumMember] 類(lèi)型3 = 3, [EnumMember] 類(lèi)型4 = 4 }
另一種如果使用ADO.NET Entity連接數(shù)據(jù)庫(kù)生成數(shù)據(jù)模型時(shí),要取消延遲加載。其實(shí)在我碰到的問(wèn)題中,主要是枚舉類(lèi)型傳輸問(wèn)題。這里據(jù)我的理解就是。
序列化的過(guò)程是,序列化生成器將對(duì)象的基本類(lèi)型 按照對(duì)象的結(jié)構(gòu) 解析成流,然后傳輸。接收到以后,解析流中的內(nèi)容,應(yīng)該是將類(lèi)型都變?yōu)樽址?,通過(guò)字符串匹配的方式 和本地的基本類(lèi)型的類(lèi)型名匹配,然后恢復(fù)對(duì)象的類(lèi)型,從而還原出原對(duì)象的結(jié)構(gòu)和值。
但是對(duì)也這種自定義的枚舉,如果沒(méi)有賦值,是沒(méi)有基本類(lèi)型的,因此序列化就報(bào)錯(cuò)了。導(dǎo)致本地連接被關(guān)閉。而作為基本類(lèi)型Int,String等因?yàn)槭腔?lèi)型,序列化中可以找到與之對(duì)應(yīng)的類(lèi)型,因此不會(huì)報(bào)錯(cuò)。
到此,相信大家對(duì)“WCF的序列化問(wèn)題怎么解決”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。