l = ['a','b','c']
d = dict((i, [0, 0]) for i in l)
Корень проблемы здесь в том, что класс 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
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)
Нельзя использовать параметр типа Microsoft.Web.Services3.Security.Tokens.UsernameToken
в веб-службе, так как сериализовать невозможно (или, точнее, десериализовать) .
Создайте класс, содержащий только данные, необходимые для создания UsernameToken
и использования его в качестве типа параметра. В любом случае клиентская сторона не создаст реальный объект UsernameToken
, существует прокси-класс, созданный из информации WSDL.