WCF и Объект - PullRequest
       11

WCF и Объект

0 голосов
/ 12 марта 2009

Я пытаюсь передать объект в веб-службу WCF, объект, который я передаю, является объектом сервера, затем я хочу иметь возможность вызвать TestConnection ();

Проблема, с которой я столкнулся, заключается в том, что сервер является базовым классом, и есть несколько производных классов Server, то есть SqlServer2005Server, OracleServer и ODBCServer, которые я хочу использовать

Я хочу иметь возможность передать объект Server, а затем определить его тип, привести его к типу и затем использовать метод

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

Ответы [ 3 ]

2 голосов
/ 12 марта 2009

Как сказал Даниэль Пратт , в конце концов, вы проводите XML-передачу (не всегда, но в большинстве случаев) по сети.

Если вы использовали прокси-генератор для генерации определения типа Сервера, то вы не сможете выполнять вызовы методов Сервера, поскольку в определении прокси используются только свойства (по крайней мере, семантически). , Кроме того, вы не можете приводить к производным типам, потому что ваш экземпляр действительно является определением отдельного типа, а не фактической базой.

Если тип Сервера действительно того же типа (и под тем же, я имею в виду ссылку на одну и ту же сборку, а не только по имени и схеме), тогда вы можете сделать то, что Стив сказал , и использовать атрибут KnownType в определении сервера, добавив один атрибут для каждого производного класса.

Однако, как он сказал, это запутывает ваш код, поэтому будьте осторожны при этом.

Я думал, что здесь будет работать использование инверсии управления, но вы сталкиваетесь с той же ситуацией с общими ссылками на конкретных поставщиков.

1 голос
/ 12 марта 2009

Представляет ли передаваемый вами объект «живое» соединение с СУБД? Если ответ да, нет надежды на то, что это когда-нибудь сработает. Имейте в виду, что, несмотря на симпатичную оболочку, единственное, что ваш веб-сервис получает от вызывающего, это кусок xml.

1 голос
/ 12 марта 2009

Вам необходимо добавить объявление KnownType в контракт на обслуживание для каждого производного класса. Есть способы автоматизировать это (поскольку это, очевидно, запутывает код и нарушает наследование), но они требуют большой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...