當客戶端引用wcf服務時,必須為服務定義乙個唯一的命名空間。在預設情況下,這個服務中所用到的類會被匯入到這個命名空間內。這樣,在不同的服務內引用同乙個資料契約時就會遇到乙個問題:在客戶端,同乙個資料契約被匯入到不同的命名空間中,無法實現轉換。
在以下例子中,personservice與contractservice同時包括對person資料契約的引用,但通過personservice獲取到的person物件,無法作為contractservice中的引數,因為在客戶端,它們被引用到不同的命名空間之中,被視為不同的兩個類。
1: [servicecontract]
2:public
inte***ce ipersonservice
3:
7:
8:public
class personservice : ipersonservice
9:
18: }
19:
20: [servicecontract]
21:public
inte***ce icontractservice
22:
26:
27:public
class contractservice : icontractservice
28:
35: }
36:從visual studio 2008開始,系統為客戶提供了「共享資料契約」這一功能。首先把需要共享的資料契約包含在乙個程式集中,生成乙個model.dll檔案。在客戶端引用這一程式集,在新增服務引用時,選擇"高階"—>"重新使用引用的程式集中的型別(r)"—>"重新使用所引用的指定程式集中的型別(s)",然後選擇model。這樣,在客戶端就會同時使用model.dll中的person物件。
談WCF資料契約疑問之共享資料契約
最近在做專案的時候,發現同乙個資料契約再客戶端隸屬於兩個不同的命名空間,為此如果兩個服務進行互動的時候會涉及到型別 的問題,互操作性很差,要進行不必要的拆和裝,在前面終於讓我找到了答案,下面我來描述一下這個場景,大家請看下面 實體類 大家請注意命名空間 using system using syst...
wcf資料契約
專案中需要使用繼承關係,乙個函式返回特定的子類,在序列化的時候需要告訴序列化器,在父類檔案中使用kowntype注釋即可。namespace healthadminwebservice.logic datamember public string exercisestep datamember pu...
wcf訊息契約
1.最多乙個引數和乙個返回值,返回值和引數的型別都是訊息型別。下面的 為定義乙個訊息契約的例項 messagecontract public class mymessage constructor create a message and populate its members.public my...