Ошибка веб-сервиса «У него нет конструктора без параметра»

StackOverflow https://stackoverflow.com/questions/3429241

Вопрос

Я создал веб-сервис, который может использовать метод, чтобы установить пользовательские учетные данные, используя 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top