2013-09-24 6 views
1

Есть три веб-службы, которые мне нужно вызвать, чтобы выполнить некоторую работу. Все они принимают объект (разные объекты) в качестве входного параметра и объект (разные объекты) в качестве выходного параметра. См. Таблицу базы данных ниже:Динамически создавать классы

CREATE TABLE WebServices (id int identity not null, webaddress varchar(50), classname varchar(30), inputParameter varchar(30), outputparameter varchar(30), function varchar(30)) 

INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService1', 'http://localhost/webservice1.asmx', "object1", "object2", "function1") 
INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService2', 'http://localhost/webservice2.asmx', "object3", "object4", "function2") 
INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService3', 'http://localhost/webservice3.asmx', "object4", "object5", "function3") 

В коде я бы построил классы из значений в базе данных. Возможно ли это? Я верю, что смогу сделать это с отражением.

В качестве альтернативы я хотел бы создать три новых класса обычным способом и использовать завод, чтобы вернуть соответствующий класс следующим образом:

If id=1 then 
return new WebService1 
ElseIf id=2 then 
return new webservice2 
ElseIf id=3 then 
return new webservice3 
End If 

Я блуждающий, какой вариант лучше.

ответ

0

Использование отражения всегда медленнее, чем жесткое кодирование (время отражения занимает время), поэтому, если скорость лучше, то вариант 2 является ответом. Если лучше писать более общий код и, возможно, писать его быстрее, то вариант 1 лучше.

2

Хотя можно генерировать классы «на лету» с использованием классов CodeDom, это уродливо и не рекомендуется для этого сценария. Если можно, я бы рекомендовал изменить поведение WebService так, чтобы он возвращал пары ключ/значение или XML-документ, содержащий структурированные данные в виде строки. Если вы действительно должны вернуть объект с определенными свойствами, я бы рекомендовал всегда искать объект того же класса, но просто чтобы этот класс полностью переопределял сериализацию SOAP, чтобы вывести его, но вам это нужно. Если все остальное не удастся, я бы использовал ваш второй вариант, прежде чем спускать динамические классы по маршруту CodeDom.

+0

Спасибо +1. Веб-службы разрабатываются сторонними компаниями. Я использую их для удаления информации из своих баз данных (которые являются Oracle или SQL Server). Я посылаю инструкцию для удаления идентификатора 1, и веб-служба удаляет все, что связано с ID 1. Веб-службы принимают разные объекты и возвращают разные объекты. Изменит ли это ваш ответ? – w0051977

+0

@ w0051977 На самом деле, я неправильно понял ваш вопрос. Я думал, что вы пишете веб-сервисы и динамически создаете объекты, которые возвращались. Теперь это немного больше. Используют ли веб-службы SOAP-форматирование или бинарное форматирование .NET? Если они используют форматирование SOAP, то я считаю, что у вас есть большой контроль над форматированием классов, что является интересным вариантом. –

+0

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

Смежные вопросы