ASMX Web サービスを使用する従来の winforms VB.NET 1.1 アプリケーションで奇妙な状況に陥っています。ユーザー トークンを WindowsIdentity オブジェクトからパラメーターとして WebMethod に送信しようとしています。'HACK: コメントを追加します。
System.Security.Principal.WindowsIdentity.GetCurrent().Token
トークンのタイプは IntPtr です。最初の問題は、生成される WSDL が「サポートされていないタイプ」のエラーで IntPtr をサポートしていないことです。
これは大きな WTF の質問であり、安全ではないように聞こえるので、簡単で役立つ代替案は歓迎しますが、ホスティング環境の複雑さを含め、このシステムを変更する方法には多くの制約があります. したがって、他の多くの頭痛の種を節約するために、データの一部を Web サービスに渡したいと思います。
問題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() に。しかし、これは新たな奇妙な問題につながります。
この方法で Web サービス メソッドの署名を定義します。
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'.
したがって、いずれかの質問への回答、または同様の代替アプローチは素晴らしいでしょう...