Ошибка веб-сервиса «У него нет конструктора без параметра»
-
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
Когда я запускаю веб-сервис, это дает эту ошибку:
«Microsoft.Web.services3.security.tokens.Usernametoken не может быть сериализован, потому что у него нет конструктора без параметра».
Один из них знает, где проблема?
Решение
Корень проблемы вот что класс Microsoft.Web.Services3.Security.Tokens.UsernameToken
не имеет конструктора меньше параметра. У него есть 3 из них, но все они требуют параметра. Установленные конструкторы на MSDN.
UsernameToken (XmlElement)
UsernameToken (String, String)
UsernameToken (String, String, PasswordOption)
Проблема в том, что во время десериализации XMLSerializer вызывает конструктор PARMETERLALL для создания экземпляра этого класса. Он не может определить тип, который не имеет конструктора без параметра.
Я понимаю, что есть не так много, что вы можете сделать, чтобы обойти эту проблему. Я бы только предложил создать частичный класс и реализую этот нуль-конструктор самостоятельно.
'ensure namespacing is correct.
Public Partial Class UsernameToken
Public Sub New()
End Sub
End Class
Другие советы
п. Кэмпбелл прав, это потому, что XMLSerializer требует конструктора без параметра.
Я не знаю WSE, но от поиска эта почта На венном блоге ALEEEEe, я не думаю, что у USERNAMETOKECHEN должен быть передан как регулярный аргумент для веб-метода - он должен быть передан в заголовки WS-безопасности WS. Вы получаете прокси, чтобы передать его в заголовки, позвонив 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
В веб-сервисе, так как это невозможно сериал (или более конкретно невозможным десериал).
Создайте класс, который просто содержит данные, которые вам нужно для создания UsernameToken
и использовать в качестве типа параметра. Сторона клиента не создаст реального UsernameToken
В любом случае объект, есть прокси-класс, созданный из информации WSDL.