ASMX Webサービスを使用する従来のwinforms VB.NET 1.1アプリケーションでは奇妙な状況に陥っています。 WindowsIdentityオブジェクトからパラメータとしてWebMethodにユーザートークンを送信しようとしています。私は 'HACK:comment'を追加します。.NET 1.1 WSDL - WebMethod(ASMX Webサービス)の入力パラメータとしてIntPtr(WindowsIdentity.Token)を使用できません。
System.Security.Principal.WindowsIdentity.GetCurrent().Token
トークンはタイプのIntPtrであり、最初の問題は、WSDLが生成されている「サポートされていない型」
の誤差でのIntPtrをサポートしていない私は、これは大きなWTFの質問で承知していると安全でないと思われるので、単純な有用な選択肢は大歓迎ですが、ホスティング環境の複雑さを含めて、このシステムをどのように変更できるかには多くの制約があります。だから私は、他の頭痛の多くを保存するために、私たちのデータをWebサービスに渡したいと思っています。 WSDLの生成から
問題1
エラー:
Method userClass.TestSendIntPtr can not be reflected.
--> There was an error reflecting 'token'.
--> System.IntPtr is an unsupported type.
(WTF率を拡張する)別のアプローチ - のIntPtr問題を回避しようとしているだけで、システムへのIntPtrを置くことですサービスにリサイズアプリ端部に
BinaryFormatter.Serialize()
を用いてBF.Deserialize().IO.Stream。しかし、これは新しい奇妙な問題につながる。
この方法でWebサービスメソッドのシグネチャを定義する:
Public Class UserService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function UserToken(ByVal tokenStream As System.IO.Stream) As Boolean
ストリームの「System.IO」資格は無視されているかのように、新たな奇妙な問題は、コンパイルエラーとしてクライアント側で発生し、そして
問題2
Value of type 'System.IO.Stream' cannot be converted to 'USERSERVICE.Stream'.
... UserServiceのクラスの一部として解釈されていますしたがって、どちらかの質問に対する答え、または同様の代替アプローチは素晴らしいでしょう...
私たちがWCFを使用していただけでは問題はありませんが、これはレガシーシステム上の単なるパッチであり、堅実な改善の余地はありません。 –