Мы находимся в странной ситуации с устаревшим приложением winforms VB.NET 1.1, использующим веб-сервисы ASMX. Попытка отправки токена пользователя из объекта WindowsIdentity в качестве параметра в WebMethod. Я буду добавлять 'HACK: комментарий.
System.Security.Principal.WindowsIdentity.GetCurrent().Token
Маркер типа IntPtr, первая проблема заключается в том, что генерируемый WSDL не поддерживает IntPtr с ошибкой «неподдерживаемый тип»
Я знаю, что это большой вопрос WTF и звучит небезопасно, поэтому приветствуются любые простые полезные альтернативы, но существует множество ограничений на то, как мы можем изменить эту систему, включая сложности со средой размещения. Поэтому я просто хотел бы передать наш кусок данных в веб-сервис, чтобы избавить от множества других головных болей.
Задача 1
Ошибка из поколения WSDL:
Method userClass.TestSendIntPtr can not be reflected.
--> There was an error reflecting 'token'.
--> System.IntPtr is an unsupported type.
Альтернативный подход (расширение коэффициента WTF) - попытка обойти проблему IntPtr - это просто поместить IntPtr в System.IO.Stream, используя
BinaryFormatter.Serialize()
в конце приложения winforms и BF.Deserialize () в службе. Но это приводит к новой странной проблеме.
Определение подписи метода веб-службы следующим образом:
Public Class UserService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function UserToken(ByVal tokenStream As System.IO.Stream) As Boolean
Новая странная проблема возникает на стороне клиента как ошибка компиляции, как если бы квалификация Stream.System.IO игнорировалась и интерпретировалась как часть класса UserService ...
Задача 2
Value of type 'System.IO.Stream' cannot be converted to 'USERSERVICE.Stream'.
Так что ответ на любой вопрос или аналогичный альтернативный подход был бы отличным ...