2010-06-14 2 views
0

я сделал клиент для доступа к моему WCF услуг в одном проекте, и все классы, которые работают с сервисами наследуемых от этого класса:Проблема с проектом .NET 2.0, используя 3.0 DLL, которая реализует услуги WCF

public abstract class ServiceClient<TServiceClient> : IDisposable where TServiceClient : ICommunicationObject 

Этот класс, где я делаю такие вещи, как удаление, ведение журнала, когда клиент был вызван, и т. Д. Некоторые общие вещи, которые обычно будут выполнять все классы обслуживания.

Все работало нормально, пока я не получил задачу реализовать это на старой системе. У меня возникла проблема, когда я использовал этот проект (DLL) в другом проекте, который не может ссылаться на System.ServiceModel (так как это старое программное обеспечение .NET 2.0, которое я все еще поддерживаю, и обновление его до 3.0 не может быть и речи). При этом, если я опускаю where TServiceClient : ICommunicationObject то проект можно построить, но ServiceClient не может использовать, например, client.Close() или client.State

Итак, мое единственное решение отказаться от where заявления, и переписать классы обслуживания?

+0

Что вы подразумеваете под "(поскольку это старое программное обеспечение .NET 2.0, которое я до сих пор поддерживаю, и обновление его до 3.0 не может быть и речи)"? Возможно ли, что клиенты вашего приложения 2.0 не имеют установленной платформы .NET 3.0+? Или, вы не можете открыть проект 2.0 в VS и перекомпилировать, ориентируясь на .NET 3.0+? Это может не включать в себя какие-либо фактические изменения кода, чтобы привести ваше старое приложение с 2.0 до 3.0. – mbeckish

+0

Ну, на сервере установлена ​​новейшая инфраструктура, поэтому я могу импортировать свою DLL (которая предварительно скомпилирована - мне не разрешено добавлять проекты в решение). И, есть много людей, работающих над одним и тем же проектом (да, я имею в виду проект, а не решение!) И т. Д. Я просто не могу его обновить (насколько я этого хотел, зная, что эта проблема будет решена мгновенно) – avance70

ответ

1

Если вы не можете обновить этот проект до 3.0, этот (или класс-оболочка) кажется вашим единственным вариантом.

+0

Хмм ... Я попытался немного его обернуть, создав простой статический класс со статическим полем, реализующим этот класс (внутри этого 3.0 проекта), но я все равно получаю ту же ошибку сборки, когда пытаюсь вызвать какой-либо метод, использовать его в 2.0 ... Я предполагаю, что если бы я использовал все методы отдельно в статических методах, это сработало бы, но это вроде бы плохое решение. – avance70

+0

Ну, в конце концов, я просто использовал 'IDisposable' вместо« ICommunicationObject »и перезаписал часть кода, хотя по-прежнему существует проблема, из-за которой я не могу вызвать утилиту напрямую (потому что она запрашивает фреймворк 3.0), но если я использую оператор 'using', клиент автоматически закрывается. – avance70

0

Что заставляет вас модернизировать? 3.0 - это не совсем новая версия фреймворка, это всего лишь несколько дополнительных dll. Ваш код 2.0 будет работать по-прежнему с использованием тех же .net-библиотек.

+0

К сожалению, 2.0 не является «моим» кодом ... это часть огромного программного обеспечения, которое управляет международными звонками. Следовательно, я действительно не могу сказать, как это кодировать, мне просто нужно внести коррективы в небольшую часть этого программного обеспечения. – avance70

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

  • Нет связанных вопросов^_^