ASP.net сообщение об ошибке при использовании REST Starter Kit - PullRequest
1 голос
/ 24 марта 2010

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

CS1684: Предупреждение как ошибка: ссылка на тип System.Runtime.Serialization.Json.DataContractJsonSerializer утверждает, что она определена в «c: \ WINNT \ assembly \ GAC_MSIL \ System.ServiceModel.Web \ 3.5.0.0__31bf3856ad364e35 \ System .ServiceModel.Web.dll ', но его не удалось найти

Я построчно удалил код, и кажется, что следующая строка кода вызывает ошибку ...

HttpContent newOrganizationContent = HttpContentExtensions.CreateXmlSerializable(newOrganizationXml);

Действительно, понятия не имею, как это исправить. Я предположил, что это может быть связано с тем, что для запуска требуется более новая версия платформы, но, глядя в IIS, он говорит, что работает под управлением версии 2.0.50727, которая, как мне кажется, является последней версией, потому что в ней говорится, что даже когда мы используем среду 3.5

Очень смущен, есть идеи?

Jon

1 Ответ

1 голос
/ 25 марта 2010

Сначала я подумал, что это возможно потому, что на сервере, на котором вы развертываете, не установлен .NET Framework 3.5SP1 и только .NET 3.5RTM.

Однако после проверки сборки .NET 3.5 RTM System.ServiceModel.Web.dll я вижу, что System.Runtime.Serialization.Json.DataContractJsonSerializer действительно определено.

Предупреждение компилятора CS1684 предполагает, что в GAC сервера есть сборка System.ServiceModel.Web.dll, но для которой не определен System.Runtime.Serialization.Json. DataContractJsonSerializer.

Итак, вещи, которые я бы проверял:

  • Убедитесь, что сервер развертывания работает как минимум .NET 3.5 RTM и что бета-версия или кандидат на выпуск не используются или не были оставлены.

  • В Visual Studio 2008 убедитесь, что вы выбрали «Целевую платформу» .NET 3.5 в свойствах проекта.

Одна последняя проверка, которую вы могли бы сделать, чтобы проверить, не связана ли проблема с установкой инфраструктуры сервера, - запустить простое приложение для непосредственного использования DataContractJsonSerializer. На странице документации MSDN приведен пример для класса:

Класс DataContractJsonSerializer (MSDN)

В крайнем случае, если сервер находится под вашим контролем, я удалю .NET Framework 3.5, а затем переустановлю с:

Microsoft .NET Framework 3.5 с пакетом обновления 1 (полная установка)

Обновление:

Согласно вашим комментариям:

Если вы используете бета-версию 3.5, скорее всего, DataContractJsonSerializer не в сборке System.ServiceModel.Web.dll.

Кажется, я вспоминаю CTP, бета-версии и релиз-кандидатов, в которых произошли поздние серьезные изменения в этой области. Я смутно помню, что DataContractJsonSerializer был одним из таких поздних дополнений / изменений из-за возросшей популярности JSON и давления сообщества. Моя память немного расплывчата, но звонит в колокол.

Чтобы заменить DLL, необходимо отменить регистрацию текущей версии в GAC, а затем зарегистрировать RTM с помощью инструмента GACUTIL.exe. Я бы не советовал смешивать RTM и бета-биты, вы оставляете себя открытым для непредсказуемого поведения.

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