Problème de service web

Résolu
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 - 3 mars 2007 à 22:31
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 - 5 mars 2007 à 21:27
Bonjour j'ai fais un service web que je teste en localhost, mais j'ai une erreur que je n'arrive pas à corriger, Merci de l'aider.

Je charge un web service avec des données d'un fichier XML.
Je filtre les données en fonction d'un Numero de Rayon (ByVal Mag AsInteger
)

Le code du web service de ma page Service.asmx

<WebMethod(Description:="C'est un web service qui charge un dataSet par un fichier Xml")> _
PublicFunction TriDataSetXml(ByVal Mag AsInteger) As DataSetXML
Dim custDs AsNew DataSetXML
Dim CustDsTrier AsNew DataSetXML
custDs.ReadXml("c:\RecupFelixAuto.xml")
Dim x As
Integer
Dim Rt As DataRow
CustDsTrier.Clear()
For x = 1 To custDs.DT_Base_Felix.Count
If Mag = custDs.DT_Base_Felix.Item(x).NUMERO_RAYON
Then
Rt = custDs.DT_Base_Felix.Rows(x)
CustDsTrier.DT_Base_Felix.Rows.Add(Rt)
End
If
Next x
Return CustDsTrier
End
Function

Je rappelle le service web dans une application Windows.

Le code de ma page Windows Form
Dim myDs
As
New DataSetXml.DataSetXML

Dim myDt
As
New DataSetXml.Service

Dim Tabl
As DataTable
myDs = myDt.TriDataSetXml(
CInt(TextBox1.Text))
Tabl = myDs.DT_Base_Felix
DT_Base_FelixDataGridView.DataSource = Tabl

Le message d'erreur est le suivant
System.Web.Services.Protocols.SoapException: Le serveur n'a pas pu traiter la demande.
---> System.ArgumentException: Cette ligne appartient déjà à une autre table.
   à System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos, Boolean fireEvent)
   à System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos)
   à System.Data.DataTable.AddRow(DataRow row, Int32 proposedID)
   à System.Data.DataRowCollection.Add(DataRow row)
   à Service.TriDataSetXml(Int32 Mag) dans C:\Documents and Settings\Manu\Mes documents\Visual Studio 2005\WebSite1\App_Code\Service.vb:ligne 38
   --- Fin de la trace de la pile d'exception interne ---

A savoir que mon service web fonctionne tres bien sans faire de filtre.

Le code du web service de ma page Service.asmx sans filtre
<WebMethod(Description:="C'est un web service qui charge un dataSet par un fichier Xml")> _
PublicFunction TriDataSetXml() As DataSetXML
Dim custDs AsNew DataSetXML
custDs.ReadXml("c:\RecupFelixAuto.xml")

Return CustDs
EndFunction

Merci pour votre aide
MANUANTIBES [:p]

5 réponses

cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
5 mars 2007 à 20:23
arf effectivement, je savais bien que c'était plus simple que ça... oublie le Rows.Remove(Rt)

C'est TonDataTable.ImportRow(Rt) qu'il faut utiliser à la place du Add(Rt) !

A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
3
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
3 mars 2007 à 22:56
Salut,
Le problème ne vient pas du WebService lui même mais de ton DataRow  :
Un DataRow ne peux pas être dans 2 tables différentes (vu qu'il conserve une référence vers la table qui le contient), donc tu dois d'abord faire un .Remove(Rt) sur la 1ère table, et ensuite un .Add(Rt) sur la nouvelle...

Bonne soirée,
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 mars 2007 à 08:42
ok je teste ton conseil ce soir et je te tiens au courant
j'etais parti au debut à faire une deuxieme table dans mon dataset , mais j'ai pas reussi a la remplir avec mon RT

MANUANTIBES [:p]
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
5 mars 2007 à 20:10
Salut
Je n'y arrive pas
voici mon code
<WebMethod(Description:=

"C'est un web service qui charge un dataSet par un fichier Xml")> _

Public
Function TriDataSetXml(
ByVal Mag
As
Integer)
As DataSetXML

Dim custDs
As
New DataSetXML

Dim CustdsTrier
As
New DataSetXML
custDs.ReadXml(
"C:/RecupFelixAuto.xml")

Dim x, y
As
Integer
Dim Rt
As DataRow
y = custDs.DT_Base_Felix.Count - 1

For x = 0
To y

' Try
If Mag = custDs.DT_Base_Felix.Item(x).NUMERO_RAYON
Then
Rt = custDs.DT_Base_Felix.Rows(x)
custDs.DT_Base_Felix.Rows.Remove(Rt)
CustdsTrier.DT_Base_Felix1.Rows.Add(Rt)

End
If
'Catch ex As Exception
' MsgBox(ex.Message)
'End Try
Next x

Return CustdsTrier

End
Functionvoici mon erreur
System.ArgumentException: Cette ligne appartient d&#233;j&#224; &#224; une autre table.
à System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos, Boolean fireEvent)
à System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos)
à System.Data.DataTable.AddRow(DataRow row, Int32 proposedID)
à System.Data.DataRowCollection.Add(DataRow row)
à Service.TriDataSetXml(Int32 Mag) dans C:\Documents and Settings\Manu\Mes documents\Visual Studio 2005\WebSite1\App_Code\Service.vb:ligne 39

J'ai encore besoin d'aide, et en plus ma boucle for x = 1 to y
n'est pas la bonne solution car apres il ne trouve pas les lignes 7,8,9....
Que dois je prendre comme boucle?

MANUANTIBES [:p]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
5 mars 2007 à 21:27
OK super

Tu as raison

For x = 0
To y

Try
If Mag = custDs.DT_Base_Felix.Item(x).NUMERO_RAYON
Then
Rt = custDs.DT_Base_Felix.Rows(x)
CustdsTrier.DT_Base_Felix.ImportRow(Rt)

End
If
Catch ex
As Exception

End
Try
Next x
par contre il faut supprimer la ligne remove
custDs.DT_Base_Felix.Rows.Remove(Rt)

MANUANTIBES [:p]
0
Rejoignez-nous