質問

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 をシリアル化できません。」

どこに問題があるか知っている人はいますか?

役に立ちましたか?

解決

ここでの問題の根本は、クラス 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
scroll top