在调试代码时发现的问题,疑似Bug,所以斗胆放在首页.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
描述:Service端的抽象类在客户端可以编译通过.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
还有我在Service端加的注释不能在Client端显示,如何为Service端的类添加注释以辅助客户端使用Service呢?‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
可以說,Known完全是SOA與OO沖突的產物,是個可憐的棄子!OO要求繼承父類的東西,但SOA不知道是否把繼承的東西Show給Client.最后WCF決定子類不Show給Client.從而導致了繼承和多態在WCF的丟失,為了彌補這個問題,Known Attribute就產生了.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Known標志著子類可被客戶端識別、使用.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
可以使用Known的三個地方‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
一.基類自身‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
二.特定操作‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
三.服務契約‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
詳細信息參見下面的代碼解釋.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
【注】‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
KnownType不可應用于interface‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
DataContract也不可以
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]using System;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
using System.Collections.Generic;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
using System.Linq;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
using System.Runtime.Serialization;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
using System.ServiceModel;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
using System.Text;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
namespace TestKnown_AX‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedBlock.gif[/img]
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]    [ServiceContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//【服務契約處聲明了A0】‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
    [ServiceKnownType(typeof(A0))]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
interface IKnown_AX‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]        [OperationContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]       
//【特定操作處聲明A1】‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
        [ServiceKnownType(typeof(A1))]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]       
void DoWork(A a);‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
/**////‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
<summary>‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
/// This is a abstract class,Please don't new it.‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]   
///‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
</summary>‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]    [DataContract(Name="A",Namespace="http://AX")]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//【基類自身處聲明A2】‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//★★★我沒有在任何地方聲明A3是Known類型★★★‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
    [KnownType(typeof(A2))]  ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
abstract‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class A‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
virtual‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OA(){}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
abstract‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OperateA();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//不能繼承父類的序列化功能,必須重新聲明‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
    [DataContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class A0 : A‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
void OperateA0() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
override‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OperateA() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]    [DataContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class A1 : A‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
void OperateA1() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
override‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OperateA() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
new‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OA() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//如果把[DataContract]契約注釋掉服務將不能啟動,報錯‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//因為前面已經聲明該類為Known,必須為可序列化‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
    [DataContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class A2 : A‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
void OperateA2() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
override‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OperateA() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
//即使加了[DataContract],客戶端也不會知道它的存在‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
    [DataContract]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class A3 : A‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
void OperateA3() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
override‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void OperateA() { }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
    ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedBlockEnd.gif[/img]}
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
客戶端(SR為引用服務的名稱)‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/None.gif[/img]namespace Test_AX‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedBlock.gif[/img]
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
partial‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class _Default : System.Web.UI.Page‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]       
protected‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
void Page_Load(object sender, EventArgs e)‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]       
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            SR.IKnown_AX proxy
=‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
new SR.Known_AXClient();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            proxy.DoWork(
new Test_AX.SR.A0());‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            proxy.DoWork(
new Test_AX.SR.A1());‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            proxy.DoWork(
new Test_AX.SR.A2());‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//不認識A3類‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//proxy.DoWork(new Test_AX.SR.A3());‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]            ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//是的,你沒看錯【抽象類A】被new了,但編譯不報錯‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//但運行時會報錯‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]
            proxy.DoWork(new Test_AX.SR.A());‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//因為B在項目內,所以編譯會報錯‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]           
//B b = new B();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]
        }‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/InBlock.gif[/img]   
public‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
abstract‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
class B‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockStart.gif[/img][img]/Images/OutliningIndicators/ContractedSubBlock.gif[/img]   
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedSubBlockEnd.gif[/img]    }
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[img]/Images/OutliningIndicators/ExpandedBlockEnd.gif[/img]}
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Demo下载‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ