Проблемы с Migrating.Net удаленное использование фреймворка 2-4
В настоящее время у меня было удаленное приложение .Net, работающее на платформе 2 под управлением IIS. Я должен обновить его до платформы 4, чтобы использовать некоторые новые компоненты. Я смог все настроить и запустить гладко на платформе 2, но как только я перехожу на платформу 4, я получаю следующее исключение, когда я пытаюсь вызвать одну из функций моего удаленного объекта.
The input stream is not a valid binary format.
The starting contents (in bytes) are:
53-79-73-74-65-6D-2E-52-75-6E-74-69-6D-65-2E-52-65 ...
Эта ошибка не является реальной ошибкой, она вызвана тем, что удаленный объект создает исключение, и IIS wrap исключение в XML, которое сбрасывает BinaryFormatter. Смотрите это для получения дополнительной информации об ошибке .
Это очень неудачно, потому что я не вижу, что вызывает исключение, и никогда раньше не использовал удаленное управление, у меня нет особых идей о том, где начать отладку. Кажется, что исключение выбрасывается еще до того, как я вошел в код, потому что я делаю изрядное количество журналов, и ни один из них, похоже, не срабатывает.
В основном, я ищу некоторые подсказки или указатель от людей, которые столкнулись с подобными проблемами:
- Что может быть причиной исключения, если код не изменился, кроме того Компиляцию .Net 2 на .Сеть 4?
- Как я могу получить полное сообщение об исключении, которое возвращается?
Вот код, который получает удаленный объект
Dim clientProvider As BinaryClientFormatterSinkProvider = New BinaryClientFormatterSinkProvider()
Dim serverProvider As BinaryServerFormatterSinkProvider = New BinaryServerFormatterSinkProvider()
serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
tsChannelName = System.Guid.NewGuid().ToString()
Dim props As IDictionary = New Hashtable()
props("port") = 0
props("name") = tsChannelName
props("typeFilterLevel") = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
props("secure") = True
props("useDefaultCredentials") = True
Dim Channel As HttpChannel = New HttpChannel(props, clientProvider, serverProvider)
ChannelServices.RegisterChannel(Channel, False)
//Get the object on the Server
Dim rtnComm As I_CMQCComm = Activator.GetObject(GetType(I_CMQCComm), server)
//Knock knock
rtnComm.IsAlive() 'Exception is thrown here
Я могу предоставить дополнительную информацию по мере необходимости.
1 ответ:
Хорошо!
Прежде всего, чтобы увидеть ошибку, рекомендуется изменить используемый формататор, чтобы можно было увидеть всю ошибку целиком.
В принципе, у меня был сервер недоступен, и IIS отправлял обратно HTML, который сбрасывал форматер.
Как увидеть ошибку:
Dim clientProvider As SoapClientFormatterSinkProvider = New SoapClientFormatterSinkProvider() Dim serverProvider As SoapServerFormatterSinkProvider = New SoapServerFormatterSinkProvider()
Не забудьте сменить паутину.Конфигурационный файл также
<channels> <channel ref="http" > <serverProviders> <formatter ref="soap" /> </serverProviders> <clientProviders> <formatter ref="soap" /> </clientProviders> </channel> </channels>
Сервер недоступен из-за ошибки в IIS. Ошибка регистрируется в разделе приложение в средстве просмотра событий (Панель Управления - > Администрирование - > Просмотр Событий).
Моя ошибка была вызвана тем, что я изменил машину.конфигурационный файл к этому IIS не будет работать под пользователем ASP_NET. Однако я не знал, что для каждого фреймворка есть файл. У IIS просто не было пользователя, чтобы запустить aspnet_wp.exe процесс, так как я отключил пользователя ASP_NET.Крошечные ошибки, надеюсь, это может помочь некоторым людям отлаживать их .NET Remoting. Он отлично работает под .Net 4!