Как напечатать значение массива из WCF для формирования метки? - PullRequest
0 голосов
/ 03 декабря 2018

WCF генерирует 6 случайных номеров лотереи, возвращает их в массиве службы wcf, однако я не могу напечатать его на этикетке в форме.

, если я пытаюсь напечатать его наокно сообщения, которое я получаю "Значение не может быть проанализировано как тип int32"

Я попытался создать новый массив в форме, подобной логике, форма array = service array, так как она возвращаетмассив сервис должен быть массив не так ли?с этим я получаю Не могу неявно преобразовать тип int в int []

, где я нахожусь в:

IService

public interface ILottoService
{

    [OperationContract]

    int[] GenerateLottoDrawNums();

    [OperationContract]

    int[] GenerateIrishLottoNums();

}

Служба

 public int[] GenerateLottoDrawNums()
    {

        int min = 1;
        int max = 59;


        int[] randomNums = new int[6];


        Random rand = new Random();


        for (int i = 0; i < randomNums.Length; i++)
        {

            int tempNum = rand.Next(min, max); 

            while (IsDuplicate(tempNum, randomNums))
            {
                tempNum = rand.Next(7);
            }
            randomNums[i] = tempNum;

        }


        return randomNums;

    }

    public Boolean IsDuplicate(int tempNum, int[]randomNums)
    {
        foreach (var item in randomNums)
        {
            if (item == tempNum)
            {
                return true;
            }
        }
        return false;
    }
}
}

Форма

    public partial class FrontEnd : Form
{
    LottoServiceReference.LottoServiceClient ws = null;
    public FrontEnd()
    {
        InitializeComponent();
    }

    private void FrontEnd_Load(object sender, EventArgs e)
    {
        ws = new LottoServiceReference.LottoServiceClient();
    }




    private void btnLottoDraw_Click(object sender, EventArgs e)
    {
        try
        {
            int[] LottoDrawNums = new int[6];

            for (int i = 0; i < LottoDrawNums.Length; i++)
            {
                LottoDrawNums[i] = ws.GenerateLottoDrawNums();

                lblNum1.Text = String.Join(",", LottoDrawNums.ToString());

                MessageBox.Show(String.Join(",", ws.GenerateLottoDrawNums()));

                Console.WriteLine(String.Join(",", ws.GenerateLottoDrawNums()));
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }


    }

    }
}

}

Предположение, что мне не хватает некоторых [] илиИНТ []?

Мой преподаватель в колледже не мог помочь, она передала меня вам, ребята.Сказав: «Он думает, что это int, а это не так. Попробуйте конвертировать в String или List, а затем распечатать это. Она гуглила и нашла вопрос переполнения стека о конвертации, но я не сохранил его и не могу найти его дома.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Похоже, что нет проблем с вашим проектом.Я копирую фрагменты кода и проверяю его локально, работает хорошо.Может быть, как сказал брат наверху, ты, возможно, что-то потерял.Я предлагаю вам опубликовать более подробную информацию о вашем проекте.enter image description here Вы можете добавить точку останова на конец сервера и запустить службу WCF в режиме отладки и проверить возвращаемое значение.Или вы добавляете другой метод для проверки работоспособности службы.

Следует отметить, что я размещаю WCF в консольном приложении и использую базовую привязку.

0 голосов
/ 04 декабря 2018

этот код

for(int i = 0; i < LottoDrawNums.Length; i++)
{
      lblNum1.Text = LottoDrawNums[0].ToString();
}

Устанавливает только первую позицию массива для метки.

Попробуйте String.Join https://docs.microsoft.com/en-us/dotnet/api/system.string.join?view=netframework-4.7.2

LblNum1.Text = String.Join(" , ", LottoDrawNums);

Это будетвозвращать что-то вроде "3, 45, 6, 54, 56, 7, 45"

Также используйте его в MessageBox.Show(String.Join(" , ", ws.GenerateLottoDrawNums()));

Методы GenerateLottoDrawNums и IsDuplicate работают отлично!

0 голосов
/ 03 декабря 2018

Попробуйте использовать StringBuilder, что-то вроде этого:

StringBuilder sb = new StringBuilder ();
For each element in array:
   sb.Append($"{element} ,")

String arrayAsString = sb.ToStirng(0, sb.Length-2);

LblNum1.Text = arrayAsString;
MessageBox.Show(arrayAsString);

Кроме того, я думаю, что вам не хватает атрибута Service Contract выше определения IService

См. https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.operationcontractattribute?view=netframework-4.7.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...