我正在尝试将对象传递给WCF Web服务,我传入的对象是Server对象,然后我希望能够调用TestConnection();
我遇到的问题是Server是基类,并且有几个派生类的服务器,即我想使用的SqlServer2005Server,OracleServer和ODBCServer
我希望能够传入服务器对象,然后确定其类型,强制转换然后使用方法
public string TestServerConnection(Server server)
{
if (server.ConnectionType == "SqlServer")
{
SqlServer2005Server x = (SqlServer2005Server)server;
// Tests connection to server and returns result
return x.TestConnection();
}
return "";
}
'Server'基类实现了IServer
我无法施展,你能建议吗?
备受赞赏
菲尔
答案 0 :(得分:2)
作为Daniel Pratt said,最后,你只是穿越了XML(并非总是如此,但大部分时间都是这样)。
如果您使用代理生成器生成服务器类型的定义,那么您将无法对Server的方法进行调用,因为在代理定义中仅使用属性(至少在语义上) 。此外,您无法转换为派生类型,因为您的实例实际上是一个单独的类型定义,而不是实际的基础。
如果Server类型确实是同一类型(并且相同,我指的是对同一程序集的引用,而不仅仅是名称和模式),那么您可以执行Steve said并使用KnownType属性在服务器定义上,为每个派生类添加一个属性。
但是,就像他说的那样,这会使你的代码卷入其中,所以在这样做时要小心。
我认为使用控制反转可以在这里工作,但是你会遇到与特定提供者的泛型引用相同的情况。
答案 1 :(得分:1)
您需要为每个派生类的服务合同添加KnownType声明。有一些方法可以实现自动化(因为它显然会使代码卷积并破坏继承),但它们需要大量的工作。
答案 2 :(得分:1)
您传递的对象是否代表与DBMS的“实时”连接?如果答案是肯定的,那就没有希望这样做了。请记住,尽管有漂亮的包装器,但是你的Web服务从调用者那里得到的唯一东西是xml。