是否可以声明一个基本已知类型并允许传输所有派生类型?C#WCF抽象?
[ServiceContract]
public interface IService
{
[OperationContract]
[ServiceKnownType(typeof(BaseMsg))]
object[] Do(BaseMsg msg);
}
这样做可以不用声明IService接口中每个派生类型的属性?
是否可以声明一个基本已知类型并允许传输所有派生类型?C#WCF抽象?
[ServiceContract]
public interface IService
{
[OperationContract]
[ServiceKnownType(typeof(BaseMsg))]
object[] Do(BaseMsg msg);
}
这样做可以不用声明IService接口中每个派生类型的属性?
没有,但如果你不介意创建非标准服务,可能只能被另一个.NET应用程序使用,那么可以使用KnownTypesAttribute使用this constructor。
这可以让你创建一个webservice,它有方法,动态地告诉它它有什么类型可用于transmision。然后,您可以使用反射来反映加载程序集中的所有类型,这些类型派生自您的类型并添加它们。但是这必须在服务器和客户端上完成,这样他们才能相互理解。
不,这是不可能的。所有派生类型都需要在WSDL中公开,因此明确指定。如果你不想修改源代码并重新编译Web服务,你可以使用<declaredTypes>
元素在web.config中达到同样的目标:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="AppName.BaseType, AppName">
<knownType type="AppName.KnownType, AppName" />
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
+1:当我忘记服务层是通过WCF时,我总是遇到这种情况。这和服务合同中缺少通用功能的确有时候会让我感到不安。 – Brook 2011-04-27 14:54:46