.純1.1WSDLを利用できないIntPtr(WindowsIdentity.トークン)を入力としてparamにWebMethod(ASMX Webサービス)
-
20-08-2019 - |
質問
私たちは不思議な状況とレポートVB.NET 1.1適用ASMX webサービスうお送りユーザーのトークンからWindowsIdentityオブジェクトとしてのパラメータをチューニングWebMethod.私を追加するHACK:コメントとなります。
System.Security.Principal.WindowsIdentity.GetCurrent().Token
のトークンの型IntPtr、最初の問題は、WSDL発生に対応しておりませんIntPtrのエラー'未サポートタイプ'
私が認識しこれは大きな達の質問と音が不安なので、簡単なもの代替案も大歓迎であり、これまでに多くの制約を変更できるこのシステムなどの合併症を開催。いることができたらと思い、我々のデータをwebサービスのその他ります。
問題1
エラーからのWSDL代:
Method userClass.TestSendIntPtr can not be reflected.
--> There was an error reflecting 'token'.
--> System.IntPtr is an unsupported type.
代替アプローチの達要因-ることができるようにIntPtr問題を入れるだけIntPtr。IO.ストリームを使用
BinaryFormatter.Serialize()
のサポートアプリの終了とも重要である。直列化復元()をサービスです。これが新しい不思議な課題です。
を定義するWebサービスのメソッドの署名が本ファッション:
Public Class UserService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function UserToken(ByVal tokenStream As System.IO.Stream) As Boolean
新奇妙な問題が生じた場合にクライアント端としてコンパイルエラーとして発表された'システム。IO資格のストリームは無視され、の一部として解釈されるUserServiceクラ---
問題2
Value of type 'System.IO.Stream' cannot be converted to 'USERSERVICE.Stream'.
で、回答のいずれか、または類似の代替アプローチしている...
解決
場合にはIntPtrが成り立たないと思うな取り組みを支援WSDLを使用し、長です。IntPtrの転換できるかを整数と長いタイプです。できるだけのパスを値としてこれらの種類(好ましくはLong)に変換ではしています。
に変換するLong
Dim value As Long = token.ToInt64()
変換から
Dim token as IntPtr = new IntPtr(value)
ことに注意が必要であるにも関わらずるトークンが有効なもののみのアドレス空間のプロセスを作成した値です。の場合の値をwebサービスを住の別のプロセスのトークンがないprobative値です。そして物理的に同じアドレスができなくなりますクエリーの値に対するトークンである。