.NET1.1WSDL 사용할 수 없습 IntPtr(WindowsIdentity.토큰)입력으로 param 에 WebMethod(ASMX 웹서비스)

StackOverflow https://stackoverflow.com/questions/1047386

문제

우리는 이상한 상황에서는 기존 winforms VB.NET 1.1 응용 프로그램을 사용하여 ASMX 웹 서비스를 사용하고 있습니다.를 보내려고 사용자는 토큰에서 WindowsIdentity 개체 매개 변수로 WebMethod.을 추가'해킹:다.

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 시스템입니다.IO.스트림을 사용하여

BinaryFormatter.Serialize()

에 winforms 응용 프로그램 종료하고 걸릴 수 있습니다.직렬화()에는 서비스입니다.하지만 이것은 이상한 새로운 문제입니다.

을 정의하는 웹 서비스 메서드의 서명에 이 패션:

Public Class UserService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function UserToken(ByVal tokenStream As System.IO.Stream) As Boolean

새로운 이상 문제가 발생한 클라이언트에서 끝으로 컴파일한 오류는 경우로,'시스템이다.IO'의 자격 스트림은 무시되고 해석되의 일부로로 클래스...

문제를 2

Value of type 'System.IO.Stream' cannot be converted to 'USERSERVICE.Stream'.

그래서 대답을 하나 질문,또는 유사한 다른 방법은 것이 큰...

도움이 되었습니까?

해결책

는 경우 IntPtr 작동하지 않기 때문에 지원의 부족에 WSDL,다음 사용 긴 대신 합니다.IntPtr 의 컨버터와 정수와 긴 유형입니다.할 수 있습니다 그냥 통과 주위에 가치의 하나로 이러한 종류(바람직하게는 긴)및 변환을 그것은 다시 다른 쪽 끝에서.

변환하는 장

Dim value As Long = token.ToInt64()

변환터

Dim token as IntPtr = new IntPtr(value)

한 가지 당신은 참고해야 하지만는 토큰에서만 유효합니다 주소 공간을 만든 프로세스의 값으로 설정합니다.전달하는 경우에는 이 값을 통해 웹 서비스에 있는 다른 프로세스,토큰 것이 없을 입증하는 값입니다.그것은 있을 것 같은 물리 주소는 아니지만 당신은지를 쿼리할 수 있는 값에는 토큰을 발급합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top