2016-08-01 7 views
2

Der Fehler Ich erhalte ist:Warum Reference.cs (WCF-Service Referenz) mit der falschen Methode Signatur erzeugt erhalten

Argument 2: von 'System.Tuple []' in ‚Tester nicht konvertieren .CommService.TupleOfstringSqlDbTypeanyTypep2GUUk_Sk []‘

der folgenden Optionen:

CommService.CommServiceClient client = new CommService.CommServiceClient(); 
Tuple<string, System.Data.SqlDbType, object>[] parameters = new Tuple<string, System.Data.SqlDbType, object>[] { 
    new Tuple<string, System.Data.SqlDbType, object>(
     paramName, 
     System.Data.SqlDbType.Int, 
     projectid)}; 
client.Open(); 
string myValue = client.getScalar(procName, parameters); 
client.Close(); 

die eigentliche Methode Signatur ist:

string getScalar(string procedure, IEnumerable<Tuple<string, SqlDbType, object>> parameters); 

Ich habe versucht, die Service-Referenz zu löschen und neu hinzuzufügen.

Ich habe auch versucht, die Service-Referenz zu konfigurieren, die Option 'Typen in referenzierten Assemblys wiederverwenden' zu deaktivieren und dann die Service-Referenz zu aktualisieren.

Ich habe versucht, Folgendes zu verwenden, aber es erzeugt auch den gleichen Fehler.

CommService.ICommService service = new CommService.CommServiceClient(); 
CommService.getScalarRequest request = new CommService.getScalarRequest(procName, parameters); 
service.getScalar(request); 

Ich habe bemerkt, dass die Reference.cs auch die folgenden enthält:

// CODEGEN: Parameter 'getScalarResult' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. 

ich diesen Dienst Referenz verwendet haben und die gleiche Methode auch in anderen Projekten, ohne Frage.

+2

WCF ist standardmäßig interoperabel, und daher wäre es ratsam, .NET spezifische Typen wie 'Tuple' zu ​​verwenden *. –

Antwort

0

Wenn Sie eine Servicereferenz generieren, können Sie Typen in referenzierten Assemblys wiederverwenden. Stellen Sie sicher, dass diese Option aktiviert ist.

Rechts den Dienstverweis klicken, wählen Sie Konfigurieren von Dienst Referenz ..., überprüfen Reuse Typen in referenzierten Assemblys und wählen Reuse Typen in allen referenzierten Baugruppen, klicken Sie dann auf OK .

Auch der Kommentar von @ marc_s ist korrekt - Sie sollten wahrscheinlich integrierte .NET-Typen vermeiden (die keine nativen XML-Typen sind) - aber nur, wenn der Service interoperabel sein soll (dh für Nicht-WCF-Clients verfügbar)).

+0

Ich habe dies sowohl mit den Wiederverwendungstypen in referenzierten Assemblys versucht, die überprüft und wiederverwendet werden Typen in allen referenzierten ausgewählten Assemblys. Das gleiche Problem besteht fort. –