В настоящее время у меня есть приложение .Net Remoting, работающее на Framework 2 под IIS.Я должен обновить его до Framework 4, чтобы использовать некоторые новые компоненты.Мне удалось все настроить и запустить гладко на Framework 2, но как только я перехожу на Framework 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 оборачивает исключение в XML, что приводит к отключению BinaryFormatter. См. Это для получения дополнительной информации об ошибке .
Это очень прискорбно, потому что я не могу видеть, что вызывает исключение, и никогда ранее не использовал Remoting, у меня не так много идей, какгде начать отладку.Похоже, что исключение выдается еще до того, как я вхожу в код, потому что я веду немало журналирования, и, похоже, ничего из этого не срабатывает.
По сути, я ищу некоторые подсказки или указатели от людей, которые столкнулисьпохожие проблемы:
- Что может быть причиной исключения, если код не изменился, кроме компиляции из .Net 2 в .Net 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
Я могу предоставить дополнительную информацию по мере необходимости.