Параметры списка WCF - PullRequest
1 голос
/ 27 апреля 2011

Я пытаюсь передать список объектов моей службе WCF, но, похоже, я не могу передать список объектов из моего консольного тестового приложения.У меня ошибка, которая гласит:

Значение типа 'System.Collections.Generic.List (Of ConsoleTestingApp.ServiceReference1.LetterVariables)' не может быть преобразовано в '1-мерный массив ConsoleTestingApp.ServiceReference1.LetterVariables '.

В этой строке:

Console.WriteLine(client.GetLetterObj("1", "1", "0", lstVariables))

У кого-нибудь есть идеи, что мне нужно делать?

Спасибо, Джейсон

******* Код ***********

Мое тестовое консольное приложение выглядит так:

    Dim Variables As LetterVariables
    Dim lstVariables As New List(Of LetterVariables)

    Variables = New LetterVariables
    Variables._Sort = 10
    Variables._key = "Letter Number"
    Variables._value = "10"
    lstVariables.Add(Variables)

    Variables = New LetterVariables
    Variables._Sort = 20
    Variables._key = "Amount"
    Variables._value = "$200"
    lstVariables.Add(Variables)



    Console.WriteLine(client.GetLetterObj("1", "1", "0", lstVariables))

    Console.WriteLine("Finished")

Вот контракт:

<OperationContract()> _
Function GetLetterVariablesObj(ByVal LetterSpecID As Int32) As List(Of LetterVariables)

Вот svc:

Public Function GetLetterObj(ByVal LetterID As String, ByVal StateID As String, ByVal CompID As String, ByVal lstVars As System.Collections.Generic.List(Of LetterVariables)) As String Implements ILetterWriter.GetLetterObj
    Dim SQLcon As New SqlClient.SqlConnection
    Dim SQLcmd As New SqlClient.SqlCommand
    Dim Variables As LetterVariables
    Dim tblVars As DataTable


    'Load the datatable to be passed to SQL Server
    tblVars = New DataTable
    tblVars.TableName = "LetterVariables"
    tblVars.Columns.Add("Order")
    tblVars.Columns.Add("Key")
    tblVars.Columns.Add("Value")
    For Each Variables In lstVars
        tblVars.Rows.Add(Variables.Sort, Variables.Key, Variables.Value)
    Next


    'Connect to the database
    SQLcon.ConnectionString = "Data Source=MySRVR;Initial Catalog=Sears;User ID=me;Password=mypass;"
    SQLcon.Open()


    'Set the procedure name, type & connection
    SQLcmd.CommandText = "sp_cmd"
    SQLcmd.CommandType = CommandType.StoredProcedure
    SQLcmd.Connection = SQLcon


    'Pass the parameters
    SQLcmd.Parameters.AddWithValue("@LetterID", LetterID)
    SQLcmd.Parameters.AddWithValue("@StateID", StateID)
    SQLcmd.Parameters.AddWithValue("@CompID", CompID)
    SQLcmd.Parameters.AddWithValue("@Vars", tblVars)


    'Initialize the function string, execute the stored procedure
    GetLetterObj = ""
    GetLetterObj = SQLcmd.ExecuteScalar


    'Close it all down
    SQLcon.Close()
    SQLcon.Dispose()
    SQLcmd.Dispose()
End Function

1 Ответ

1 голос
/ 27 апреля 2011

Это потому, что по умолчанию коллекции представляются в виде массивов.Вы должны быть в состоянии передать в lstVariables.ToArray().См. этот пост для объяснения, почему это так.

enter image description here

...