WCF和对象

WCF和对象,wcf,web-services,casting,Wcf,Web Services,Casting,我试图将一个对象传递到WCF web服务中,我传递的对象是一个服务器对象,然后我希望能够调用TestConnection() 我遇到的问题是服务器是基类,并且有几个服务器派生类,即SqlServer2005Server、OracleServer和ODBCServer,我要使用它们 我希望能够传入一个服务器对象,然后确定它的类型,强制转换它,然后使用该方法 public string TestServerConnection(Server server) { if (server.Conn

我试图将一个对象传递到WCF web服务中,我传递的对象是一个服务器对象,然后我希望能够调用TestConnection()

我遇到的问题是服务器是基类,并且有几个服务器派生类,即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 "";
}
“服务器”基类实现IServer

我不能投,你能建议吗

非常感谢


Phill

您需要将KnownType声明添加到每个派生类的服务契约中。有一些方法可以实现自动化(因为它显然会使代码复杂化并破坏继承),但它们需要大量的工作。

您需要将KnownType声明添加到每个派生类的服务契约中。有一些方法可以自动化这一过程(因为它显然会卷积代码并破坏继承),但它们需要大量的工作。

您传递的对象是否表示与DBMS的“实时”连接?如果答案是肯定的,那么这种方法就不可能奏效。请记住,尽管有漂亮的包装器,您的web服务从调用者那里得到的唯一东西是一大块xml。

您传递的对象是否表示到DBMS的“实时”连接?如果答案是肯定的,那么这种方法就不可能奏效。请记住,尽管有漂亮的包装器,但您的web服务从调用者那里得到的唯一东西是一大块xml。

因为,最终,您只是在传输xml(不总是这样,但大多数时候是这样)

如果使用代理生成器生成服务器类型的定义,则无法调用服务器的方法,因为代理定义中只使用属性(至少在语义上)。此外,您不能强制转换为派生类型,因为您的实例实际上是一个单独的类型定义,而不是实际的基

如果服务器类型确实是相同的类型(这里的“相同”是指对同一程序集的引用,而不仅仅是在名称和模式中),那么您可以做什么,并在服务器定义上使用KnownType属性,为每个派生类添加一个属性

然而,正如他所说,这会使代码变得复杂,所以在执行此操作时要小心

我原以为在这里使用控制反转会起作用,但在对特定提供者的泛型引用中会遇到相同的情况。

因为,最终,您只是在网络上穿梭XML(不总是这样,但大多数时候是这样)

如果使用代理生成器生成服务器类型的定义,则无法调用服务器的方法,因为代理定义中只使用属性(至少在语义上)。此外,您不能强制转换为派生类型,因为您的实例实际上是一个单独的类型定义,而不是实际的基

如果服务器类型确实是相同的类型(这里的“相同”是指对同一程序集的引用,而不仅仅是在名称和模式中),那么您可以做什么,并在服务器定义上使用KnownType属性,为每个派生类添加一个属性

然而,正如他所说,这会使代码变得复杂,所以在执行此操作时要小心

我认为在这里使用控制反转会起作用,但是在对特定提供者的泛型引用中会遇到同样的情况