20 messaggi dal 06 settembre 2002
Buonasera,
mi hanno chiesto di creare un metodo che accetta una classe in ingresso.
Ovviamente da questa classe devo recuperare determinate informazioni.
Dove posso trovare degli esempi?
Grazie.
Modificato da iif il 29 gennaio 2014 16.41 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

iif ha scritto:

mi hanno chiesto di creare un metodo che accetta una classe in ingresso un argomento di tipo complesso.

E' possibile: crea una classe nel tuo progetto e decorarla con l'attributo DataContract. Poi decora le sue proprietà pubbliche con l'attributo DataMember. Qui trovi la documentazione:
http://msdn.microsoft.com/en-us/library/ms733127.aspx

Quando hai scritto la classe, vai a cambiare il webmethod in modo che il suo parametro sia del tipo che hai appena creato. Ecco un esempio in cui puoi vedere dei webmethods che due parametri di tipo complesso (puoi fargliene avere anche più di uno, se ne dovessi aver bisogno).
http://msdn.microsoft.com/en-us/library/ms752104.aspx

Se al tuo servizio WCF si accede con interfaccia REST, forse è più semplice lavorare con webmethods che possiedono un solo parametro.

ciao,
Moreno
Modificato da BrightSoul il 01 febbraio 2014 17.52 -

Enjoy learning and just keep making
20 messaggi dal 06 settembre 2002
Ciao,
ti posto il codice, non capisco cosa manca

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Wcf_SMS
{
// NOTA: è possibile utilizzare il comando "Rinomina" del menu "Refactoring" per modificare il nome di interfaccia "IService1" nel codice e nel file di configurazione contemporaneamente.
[ServiceContract]


public interface IServizio
{

[OperationContract]
Boolean sendSMS(string xutente, string xpassword, mittente, string xSMSText, out string Errore);

//[OperationContract]
//Boolean getStatusAndCosts(string user, string password, Guid communicationId, out List<string>commStatus, out string error);


}
[DataContract]
public class mittente
{
[DataMember]
public Guid userid
{
set{this.userid = value;}
get{return this.userid;}
}
[DataMember]
public string salutation
{
set { this.salutation = value; }
get { return this.salutation; }
}
[DataMember]
public string name
{
set { this.name = value; }
get { return this.name; }
}
[DataMember]
public string surname
{
set { this.surname = value; }
get { return this.surname; }
}
[DataMember]
public string sendernumber
{
set { this.sendernumber = value; }
get { return this.sendernumber; }
}
}

}

------------------------------------------------------------------------
using System.ServiceModel;
using System.Text;
using System.Data.Sql;
using System.Data.SqlClient;

namespace Wcf_SMS
{
public class Servizio : IServizio
{
public Boolean sendSMS(string xutente, string xpassword, mittente , string xsmsText, List<string> NumeriCell, out string rErrore)
{
string strConnessione = "Data Source=localhost;Initial Catalog=SMS;Persist Security Info=True;User ID=xut;Password=xpwd";
string strSQL = "";
string xxsmsText = xsmsText;

List<string> xxNumeri;
xxNumeri=NumeriCell;

try
{
//SqlConnection Connessione = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnessioneSMS"]);

SqlConnection Connessione = new SqlConnection(strConnessione.Replace("xut", xutente).Replace("xpwd", xpassword));
SqlCommand Comando = new SqlCommand();
for (int i = 0; i <= NumeriCell.Count - 1; i++)
{
strSQL = "Insert into SMS (SMS_Data, SMS_Msg, SMS_Tel, SMS_Nomi) Values(";
strSQL += Convert.ToDateTime(DateTime.Today);
strSQL += "'" + xsmsText + "','" + NumeriCell[i] + "',";
strSQL += "'" + mittente.cognome + " - " + mittente.nome + "', ";
strSQL += ")";

Comando.Connection = Connessione;
Comando.CommandText = strSQL;
Comando.Connection.Open();
Comando.ExecuteNonQuery();
Comando.Dispose();
Connessione.Close();
Connessione.Dispose();
}
}
catch (Exception Errore)
{
rErrore = Errore.Message;
return false;
}

rErrore = "Esito Positivo";
return true;
}

public Boolean getStatusAndCosts(string xutente, string xpassword, Guid xcommunicationId, out List<string> xcommStatus, out string rErrore)
{
try
{
List<string> Utenti = new List<string>();
Utenti.Add("39874397");
Utenti.Add("43503854083");
Utenti.Add("4050384");
Utenti.Add("3487593785");
xcommStatus = Utenti;
rErrore = "bravo";
return true;
}
catch
{
xcommStatus = null;
rErrore = "no bravo";
return false;
}

}
}
}
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
ogni parametro deve avere un nome e un tipo. Modifica così la definizione del webmethod.

public Boolean sendSMS(string xutente, string xpassword, mittente mittente, string xsmsText, List<string> NumeriCell, out string rErrore)

Ti consiglio di rinonimare la classe mittente in Mittente, con la M grande. Si preferisce usare il PascalCase, mentre per i nomi di variabili locali si mantiene il camelCase. La definizione del webMethod dunque diventerebbe:

public Boolean sendSMS(string xutente, string xpassword, Mittente mittente, string xsmsText, List<string> NumeriCell, out string rErrore)


C'è anche un'altra importante modifica da fare subito, altrimenti rischi che gli utenti possano rovinarti il database. In questi due punti sei vulnerabile alla injection di codice malevolo:

SqlConnection Connessione = new SqlConnection(strConnessione.Replace("xut", xutente).Replace("xpwd", xpassword));
...
strSQL += "'" + xsmsText + "','" + NumeriCell[i] + "',";


Usa, rispettivamente, un ConnectionStringBuilder e dei SqlParameter. Non fare altro prima di aver sistemato questo.

ciao,
Moreno
Modificato da BrightSoul il 02 febbraio 2014 13.21 -

Enjoy learning and just keep making
20 messaggi dal 06 settembre 2002
Grazie.

Solo un'altra cosa, ora mi ritorna questo errore:

Errore1'Wcf_SMS.Servizio' non implementa il membro di interfaccia 'Wcf_SMS.IServizio.sendSMS(string, string, Wcf_SMS.Mittente, string, out string)'
Modificato da iif il 02 febbraio 2014 16.17 -
20 messaggi dal 06 settembre 2002
Ciao, sembra sia ok, ora ho il problema di chiamare il metodo, pensavo di farlo in questo modo:
Invio.sendSMS(mioErrore,"sa","@sa",Tizio,"ciao",Utenti)

Credo che l'errore si riferisca alla classe
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
posta il testo dell'errore. Può darsi che tu abbia invertito l'ordine degli argomenti o che non siano del tipo giusto.

Enjoy learning and just keep making
20 messaggi dal 06 settembre 2002
Mi dice che ci sono alcuni argomenti non validi

private void button1_Click(object sender, EventArgs e)
{
string mioErrore;
Servizio.IServizio Invio = new Servizio.ServizioClient();

Servizio.Mittente Tizio =new Servizio.Mittente();

Tizio.name="Fabio";
Tizio.surname="Iommi";

List<string> Utenti = new List<string>();
Utenti.Add("39874397");
Utenti.Add("43503854083");
Utenti.Add("4050384");
Utenti.Add("3487593785");


if (!Invio.sendSMS(out mioErrore,"sa","@sa",Tizio,"ciao",Utenti))
txtErrore.Text = mioErrore;
}

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.