1

を使用してユーザー資格情報を設定する方法を提供する Web サービスを作成しましたMicrosoft.Web.Services3.WebServicesClientProtocol。サンプルコードは次のとおりです。

<WebMethod()> _
    Public Sub ClientCredential1(Of TSecurityToken As SecurityToken)_
         (ByVal UserCred As Microsoft.Web.Services3.Security.Tokens.UsernameToken)

        Dim cProxy As New Microsoft.Web.Services3.WebServicesClientProtocol()
        cProxy.SetClientCredential(UserCred)
    End Sub

Web サービスを実行すると、次のエラーが発生します。

「パラメーターなしのコンストラクターがないため、Microsoft.Web.Services3.Security.Tokens.UsernameToken をシリアル化できません。」

誰でも問題がどこにあるか知っていますか?

4

3 に答える 3

2

ここでの問題の根本は、クラスMicrosoft.Web.Services3.Security.Tokens.UsernameTokenにパラメーターのないコンストラクターがないことです。3 つあるのですが、すべてパラメーターが必要です。MSDN の UsernameToken コンストラクター

  • UsernameToken (XmlElement)
  • UsernameToken (String, String)
  • UsernameToken (String, String, PasswordOption)

問題は、逆シリアル化中に XmlSerializer がパラメーターなしのコンストラクターを呼び出して、そのクラスのインスタンスを作成することです。パラメーターなしのコンストラクターを持たない型を逆シリアル化することはできません。

この問題を回避するためにできることはあまりないと思います。部分クラスを作成し、そのゼロパラメーターコンストラクターを自分で実装することをお勧めします。

'ensure namespacing is correct.
Public Partial Class UsernameToken
    Public Sub New()
    End Sub    
End Class
于 2010-08-07T06:29:17.000 に答える
0

Microsoft.Web.Services3.Security.Tokens.UsernameTokenシリアル化できない (具体的には逆シリアル化できない) ため、Web サービスでこの型のパラメーターを使用することはできません。

作成しUsernameTokenてパラメータ タイプとして使用する必要があるデータだけを含むクラスを作成します。いずれにせよ、クライアント側は実際のUsernameTokenオブジェクトを作成しません。WSDL 情報から作成されたプロキシ クラスがあります。

于 2010-08-07T06:53:12.550 に答える
0

p。campbell の言うとおりです。これは、XmlSerializer がパラメーターなしのコンストラクターを必要とするためです。

私は WSE を知りませんが、 Aleem の Weblog のこの投稿を見て、UsernameToken が Web メソッドへの通常の引数として渡されることになっているとは思いません。WS-Security SOAP ヘッダーで渡されることになっています。 . SetClientCredential()を呼び出して、ヘッダーでプロキシに渡すようにします。上記のブログ投稿の例を次に示します。

Dim oService As New WSETestService.ServiceWse

Dim U As New UsernameToken(“&lt;User_Name>”, “&lt;Password>”, PasswordOption.SendHashed)
oService.SetClientCredential(U)
于 2010-08-07T06:43:44.130 に答える