ошибка веб-службы "у нее нет конструктора без параметров"

l = ['a','b','c']
d = dict((i, [0, 0]) for i in l)
1
задан p.campbell 7 August 2010 в 05:52
поделиться

3 ответа

Корень проблемы здесь в том, что класс Microsoft.Web.Services3.Security.Tokens.UsernameToken не имеет конструктора без параметров.У него их 3, но все они требуют параметра. Конструкторы UsernameToken в MSDN .

  • 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
2
ответ дан 2 September 2019 в 22:21
поделиться

p. campbell прав, это потому что XmlSerializer требует конструктор без параметров.

Я не знаю WSE, но, судя по этому посту на Aleem's Weblog, я не думаю, что UsernameToken должен передаваться как обычный аргумент веб-методу - он должен передаваться в заголовках WS-Security SOAP. Вы заставляете прокси передавать его в заголовках, вызывая SetClientCredential(). Вот пример из вышеприведенного сообщения в блоге:

Dim oService As New WSETestService.ServiceWse

Dim U As New UsernameToken(“<User_Name>”, “<Password>”, PasswordOption.SendHashed)
oService.SetClientCredential(U)
0
ответ дан 2 September 2019 в 22:21
поделиться

Нельзя использовать параметр типа Microsoft.Web.Services3.Security.Tokens.UsernameToken в веб-службе, так как сериализовать невозможно (или, точнее, десериализовать) .

Создайте класс, содержащий только данные, необходимые для создания UsernameToken и использования его в качестве типа параметра. В любом случае клиентская сторона не создаст реальный объект UsernameToken , существует прокси-класс, созданный из информации WSDL.

0
ответ дан 2 September 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: