网服务的错误',它并不具有无参constructor'
-
26-09-2019 - |
题
我已经创建了一个网服务,它可以的方法来设定的凭证用户使用 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
当我运行的网服务,它给这个错误:
"微软。网。3.安全。标记。UsernameToken不能化,因为它并不具有无参构造。"
没有任何一个知道问题出在哪里?
解决方案
根的这里的问题是,类 Microsoft.Web.Services3.Security.Tokens.UsernameToken
没有一个参数的构造。它有3个,但它们都需要参数。 UsernameToken构造上MSDN.
UsernameToken (XmlElement)
UsernameToken (String, String)
UsernameToken (String, String, PasswordOption)
问题是,在反,序列化程序的电话无参构造创建的一个实例。它不能deserialize的类型并不具有无参构造。
我得到的感觉没有多少你可以做的工作围绕这个问题。我只能建议创建一个分类,并执行零param构造自己。
'ensure namespacing is correct.
Public Partial Class UsernameToken
Public Sub New()
End Sub
End Class
其他提示
页。坎贝尔是正确的,这是因为XmlSerializer的要求参数构造。
我不知道WSE,但看的关于阿利姆的博客这个帖子,我不认为用户名令牌应该作为常规参数的Web方法传递 - 它应该在的WS-Security SOAP头传递。您可以通过调用 SetClientCredential()一个获得代理将它传递的头>。以下是从上述博客文章的示例:
Dim oService As New WSETestService.ServiceWse
Dim U As New UsernameToken(“<User_Name>”, “<Password>”, PasswordOption.SendHashed)
oService.SetClientCredential(U)
您不能使用类型Microsoft.Web.Services3.Security.Tokens.UsernameToken
的参数中的web服务,因为它不可能串行化处理(或更具体不可能deserialise)。
创建一个类,只包含你需要创建一个UsernameToken
和使用作为参数类型的数据。客户端不会无论如何创建真实UsernameToken
对象,存在来自WSDL的信息创建的代理类。