我在遗留服务中有一个WebMethod。此服务目前是.NET 3.5构建的应用程序(Visual Studio 2008):
<WebMethod(EnableSession:=True)> _
Public Function Login(ByVal username As String, ByVal password As Char()) As MyAppUser
然后从VB.NET MVC .NET 4.5客户端(Visual Studio 2012)中尝试访问Login。 (我已经更改了一些变量名称以不使用我们的内部命名 - 所以不要介意任何拼写错误 - 相同的代码在Visual Studio 2008中工作,见下文)。
Dim MyWebService as WebService.WebServiceClass = New WebService.WebServiceClass()
....
Dim encryptedPassword As String = EncryptString(password)
Dim rights As WebService.MyAppUser = MyWebService.Login(user, encryptedPassword.ToCharArray())
问题是Visual Studio 2012编译器遇到了encryptedPassword.ToCharArray()的问题 - 给出了
Error 1 Value of type '1-dimensional array of Char' cannot be converted to 'WebService.WebServiceClass.ArrayOfChar'.
在我的客户参考的Reference.vb中:
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.CollectionDataContractAttribute(Name:="ArrayOfChar", [Namespace]:="http://tempuri.org/", ItemName:="char"), _
System.SerializableAttribute()> _
Public Class ArrayOfChar
Inherits System.Collections.Generic.List(Of Char)
End Class
但是,如果我在Windows .NET 3.5 Web应用程序(Visual Studio 2008)中使用相同的代码,它会编译并正常工作。我想使用ASP.NET MVC让我的生活更轻松,但我似乎无法克服这个小障碍。
答案 0 :(得分:1)
错误消息表明当encryptedPassword.ToCharArray()
是预期类型时ArrayOfChar
正在返回一个数组,但我不知道为什么它在.NET 3.5中有效。
无论如何,要让它发挥作用,请尝试更改此行:
Dim rights As WebService.MyAppUser = MyWebService.Login(user, encryptedPassword.ToCharArray())
这样的事情:
Dim MyArrayOfChar As New ArrayOfChar
MyArrayOfChar.AddRange(encryptedPassword.ToCharArray())
Dim rights As WebService.MyAppUser = MyWebService.Login(user, MyArrayOfChar)