2010-08-07 4 views
1

Microsoft.Web.Services3.WebServicesClientProtocol을 사용하여 사용자 자격 증명을 설정할 수있는 웹 서비스를 만들었습니다. 샘플 코드는 다음과 같습니다 문제가웹 서비스 오류 '매개 변수없는 생성자가 없습니다.'

"Microsoft.Web.Services3.Security.Tokens.UsernameToken cannot be serialized because it does not have a parameterless constructor."

가 하나라도 알고 있나요 :

<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 

나는 웹 서비스를 실행하면이 오류를 준다?

+0

안녕하세요! StackOverflow에 오신 것을 환영합니다! 게시물을 좀 더 읽기 쉽고 응답 할 가능성이 높아 지도록 형식을 지정하려면 [StackOverflow Markup Guide] (http://stackoverflow.com/editing-help)를 읽어보십시오. 당신의 질문에 행운을 비네! –

+0

나는 UserCred 유형의 새 변수를 초기화하거나 생성하려면 New() 생성자와 함께 무언가를 보내야 함을 의미합니다. IE, 새로운 myCreds를 새로운 userCred (param1, param2)로 변경하십시오. 나는 확실히 모르므로 대답으로 게시하지는 않겠지 만 거기에서 시작할 것입니다. – Tommy

답변

2

여기에서 문제의 근본 원인은 클래스 Microsoft.Web.Services3.Security.Tokens.UsernameToken에 매개 변수가없는 생성자가 없다는 것입니다. 그것들 중에 3 개가 있지만 그것들은 모두 매개 변수를 요구합니다. UsernameToken constructors on MSDN. UsernameToken (String, String)

  • UsernameToken (String, String, PasswordOption)
  • 문제는 직렬화 복원시에, XmlSerializer가 해당 클래스의 인스턴스를 만들 수있는 매개 변수가없는 생성자를 호출하는 것입니다 UsernameToken (XmlElement)

    • . 매개 변수없는 생성자가없는 형식을 deserialize 할 수 없습니다.

      이 문제를 해결하기 위해 할 수있는 일이 많지 않습니다. 부분 클래스를 작성하고 zero-param 생성자를 직접 구현하는 것이 좋습니다.

      'ensure namespacing is correct. 
      Public Partial Class UsernameToken 
          Public Sub New() 
          End Sub  
      End Class 
      
  • +1

    UsernameToken은 참조 된 어셈블리에서 정의되었으므로 부분 클래스 정의를 사용하여 생성자를 추가 할 수 있다고 생각지 않습니다 ... 클래스의 모든 부분에 대한 소스 코드가있는 경우에만 작동한다고 생각합니다. –

    +0

    @ 리차드 : 나는 많이 생각했다. 그것은 긴 발사였습니다. –

    0

    p. 왜냐하면 XmlSerializer에 매개 변수없는 생성자가 필요하기 때문입니다.

    Aleem의 Weblog에서 this post을 보면서 나는 UsernameToken이 웹 메서드에 대한 일반적인 인수로 전달되지 않는다고 생각합니다. WS- 보안 SOAP 헤더. SetClientCredential()을 호출하여 헤더에서 전달할 프록시를 가져옵니다. 다음은 위의 블로그 게시물의 예이다 : 그것은 (deserialise을 더 구체적으로 또는 불가능)에는 직렬화하는 것은 불가능으로

    Dim oService As New WSETestService.ServiceWse 
    
    Dim U As New UsernameToken(“<User_Name>”, “<Password>”, PasswordOption.SendHashed) 
    oService.SetClientCredential(U) 
    
    0

    당신은, 웹 서비스의 유형 Microsoft.Web.Services3.Security.Tokens.UsernameToken의 매개 변수를 사용할 수 없습니다.

    UsernameToken을 만들고 매개 변수 유형으로 사용해야하는 데이터 만 포함하는 클래스를 만듭니다. 클라이언트 측은 실제 UsernameToken 객체를 만들지 않을 것이며 WSDL 정보로 생성 된 프록시 클래스가 있습니다.

    관련 문제