Pergunta

Fundo: 3-4 semanas experiência em Silverlight3 / C # / Net e cerca de 3 dias pena com o conceito RIA Services.. (A maioria das minhas perguntas anteriores até à data deve explicar o porquê)

Estou fazendo uma implementação de teste de serviços de RIA da Microsoft com Silverlight3. Isso faz parte de uma prova de conceito que tenho que fazer para um cliente. Por isso é muito básico. Eu descobri como construir o projeto Silverlight3 usando serviços RIA etc. Então passando e retornando cordas e int de nenhum problema no momento.

Mas eu preciso para retornar um ArrayList de minha classe de serviço de domínio para o meu cliente SL3. Mas parece passar de volta um ArrayList como é, não é permitido. E meu conhecimento limitado de C # não ajuda em fazer rápido tipo de fundição / convertions / etc. Esta função do lado do servidor recebe um ArrayList que deve ser devolvido ao cliente SL3, então eu tenho que fazer alguma coisa com ele, para enviá-lo do lado do cliente.

Pergunta: Alguém sabe o que deve ser feito para um ArrayList (em c #) para permitir uma função de classe DomainService para devolvê-lo para uma função de cliente / SL3 chamando?

[ NOTA: a maioria dos meus todas as tentativas finais no erro: ". Operação de serviço chamado 'myFunctionName' não se conforma com a assinatura requerida Ambos os tipos de retorno e parâmetro deve ser um tipo de entidade ou um dos tipos serializáveis ??predefinidos ".]

Por favor, sinta-se livre para solicitar qualquer informação que você acha que seria apropriado. Agradecemos antecipadamente.

Foi útil?

Solução

As minhas desculpas por não postar a solução que eu encontrei. Bosses jogou mais trabalho para mim do que eu poderia segurar. :) Por favor, note minha solução pode não ser o melhor, mas desde o meu conhecimento em serviços de SL e RIA são tão novo, eu acho que pode ser dispensado. Inicialmente eu queria passar de volta matrizes bastante complicada a partir do código fornecido pelo nosso cliente, mas esforço e tempo restrições permitiu-me apenas para obtê-lo direito de converter e retornar uma lista. Espero que isso ajude de alguma forma.

Cliente Side:. Código Silverlight nos MainPage.xaml.cs eu tenho uma chamada para recuperar uma lista de dados do lado do servidor, a exibição em uma lista suspensa

// Function called on load of the SL interface
// 'slayer' is an object of the Domain Service Class server-side
// 'this.gidSessionNumber' is just a number used in the demo to represent a session
public void loadPaymentTypeComboBox()
{
    InvokeOperation<IEnumerable<string>> comboList = sLayer.getPaymentTypeCombo(this.gidSessionNumber);
    comboList.Completed += new EventHandler(popPaymentCombo_complete);
}//function loadAllComboBoxes

// Event handler assigned
public void popPaymentCombo_complete(object sender, EventArgs e)
{
    InvokeOperation<IEnumerable<string>> obj = (InvokeOperation<IEnumerable<string>>)sender;
    string[] list = obj.Value.ToArray();

    // 'paymentTypeDropdown' is the name of the specific comboBox in the xaml file
    paymentTypeDropdown.IsEnabled = true;

    // Assign the returned arrayList as itemSource to the comboBox
    paymentTypeDropdown.ItemsSource = list;
}

na classe de serviço de domínio Eu tenho a função associada:

    [ServiceOperation]
    public List<string> getPaymentTypeCombo(string gidNumber)
    {
        // Build objects from libraries provided by our client
        SDT.Life.LifeCO.clsSystemCreator.CreateSysObjects(gidNumber);
        this.lobjSys = SDT.Life.LifeCO.clsSystemCreator.GetSysObject(gidNumber);

        // Rtrieve the ArrayList from the client's code       
        clsTextList comboList= this.lobjSys.lstPaymentType_PaymentQueue;

        // Get the length of the returned list
        int cnt= (int)comboList.Count();

        // Create the List<string> which will be populated and returned
        List<string> theList= new List<string>();

        // Copy each element from the clsTextList to the List<string>
        for (int i = 0; i < cnt;i++)
        {
            string status= comboList.Item(i).Description;
            theList.Add(status);
        }

        // return the newly populated List<string>
        return theList;
    }//end function getPaymentTypeCombo

Outras dicas

Não tenho certeza de que você pode retornar um ArrayList. Eu acho que você deve pensar em retornar um IEnumerable vez que fará com que o serviço reconhece o método como um método de leitura.

Se você tem uma lista ou ObservableCollection e desejo de vinculá-lo a um ItemControl como ComboBox, você pode definir o ItemsSource em seu ItemControl. Use a propriedade DisplayPath na ItemControl para definir a propriedade que você deseja exibir ou usar um DataTemplate.

<ComboBox>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <TextBlock Text={"Binding Path=Property1"}/>
        <TextBlock Text={"Binding Path=Property2"}/>
        <TextBlock Text={"Binding Path=Property3"}/>
      </StackPanel>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top