it-swarm.com.de

Der Wert ist aufgrund seines Datentyps 'clientcontracttype' ungültig.

Ich erhalte eine Fehlermeldung mit folgendem Hinweis: 

Das Vertragsattribut ist ungültig. der Wert ist nach .__ ungültig. sein Datentyp 'clientcontracttype'

Im Folgenden finden Sie die Endpunktkonfiguration in web.config dieser WCF-Anwendung. Ich verwende .NET Framework 4.5 und Visual Studio 2012. Ich habe den Vertrag überprüft, der OnlineReporting.Core.Contracts.IReportingInternalWcfPortal bereits vorhanden ist.

<endpoint address="http://localhost:63817/ReportingInternalWcfPortal.svc" 
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpBinding" 
          contract="OnlineReporting.Core.Contracts.IReportingInternalWcfPortal" 
          name="ReportingInternalPortal" />
21
Nirman

Ich sehe, dass diese Frage ziemlich alt ist und ich weiß nicht, ob Sie jetzt eine Lösung gefunden haben, aber für den Fall, dass dies das ist, was ich gefunden habe, wird sich lösen:

1) Klicken Sie im Projektmappen-Explorer im Ordner "Servicereferenzen" mit der rechten Maustaste auf den Servicereferenznamen und wählen Sie "Servicereferenz konfigurieren".

2) Das Fenster Service Reference Settings wird angezeigt. Deaktivieren Sie das Kontrollkästchen "Typen in referenzierten Baugruppen wiederverwenden", und klicken Sie auf die Schaltfläche OK.

3) Erstellen Sie das Projekt neu.

Nach dem Wiederaufbau sollte die Warnung verschwinden.

20
TK71

Ich habe diese Frage auf der Suche nach dem gleichen Fehler in einem Web-Service-Projekt gefunden.

In meinem Fall ist dieser Fehler aufgetreten, als ich vergessen hatte, das [ServiceContract]-Attribut der IServiceBase-Schnittstelle hinzuzufügen.

Sobald ich es hinzugefügt habe, ging der Fehler weg.

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

namespace MyService
{
    [ServiceContract]
    public interface IServiceBase
    {
        [OperationContract]
        IEnumerable<ListItem> GetListItems();

        [OperationContract]
        void SaveListItems(IEnumerable<ListItem> listItems);
    }
20
OrangeKing89

Der gleiche Fehler tritt auf, wenn Sie einen Verweis [auf das Projekt mit der .config] auf das tatsächliche Projekt/die Bibliothek mit dem Schnittstellen-/Servicevertrag verpassen.

In meinem Fall habe ich den Servicevertrag geändert, indem ich unwissentlich eine Schnittstelle entfernte, die der Schlüssel zum Servicevertrag war.

Wochen später fand ich einen defekten Client mit einer veralteten Servicereferenz. Da die Entfernung der Schnittstelle fehlerhaft war, habe ich sie wieder eingefügt.

Eine andere mögliche Lösung wäre die Neuerstellung der Servicereferenz, um sie an den neuen Servicevertrag anzupassen (in meinem Fall wäre die Erstellung des Projekts fehlgeschlagen, da die referenzierte Schnittstelle entfernt wurde).

Vielen Dank an OrangeKing89, dass Sie mich in die richtige Richtung weisen. Ich wusste, dass sich das Potenzial des Servicevertrags ändern könnte.

3
Steve

Mir ist klar, dass dies ein alter Thread ist, aber in meinem Fall bestand das Problem darin, dass jemand zu einem Zeitpunkt einen Service-Verweis zu dem Projekt hinzugefügt hatte und sich dann für eine andere Route entschieden hatte, aber der Eintrag blieb in web.config, also einfach Durch das Löschen dieses Eintrags in web.config wurde das Problem für mich behoben.

1
Josh

In meinem Fall hatte ich einen Namenskonflikt.

Wenn Sie eine Servicereferenz hinzufügen, generiert Visual Studio eine Client-Klasse als Proxy, die den Vertrag implementiert. Der Standardname für diesen Proxy ist der Name des von "Client" angefügten Services. Wenn Ihr Service "MyService" ist, würde dies die Client-Klasse sein sei "MyServiceClient".

Mein Problem war, dass mein Projektname "MyServiceClient" war! was diesen Konflikt verursacht hat. 

1
Emad Alashi

Ich weiß, dass diese Frage uralt ist, jedoch stieß ich auf das gleiche Problem mit C # und Visual Studio 2017. Alles funktionierte und kompilierte gut, dann nicht. Ich habe von .Net 4.6.2 auf 4.6 heruntergestuft, da SQLite v108 108 nicht unterstützt, dann habe ich diesen und andere Fehler erhalten. Ich habe ein bisschen Zeit gebraucht, um eine Lösung zu finden. Ich habe meine Lösung nirgendwo gesehen, also dachte ich, dass ich sie für die Zukunft aufstellen werde.

Ich habe meine Servicereferenz gelöscht, alle meine Änderungen in TFS eingecheckt und die Servicereferenz dann wieder hinzugefügt. Ich baute die Lösung und alles war wieder gut.

Ich habe die app.config und andere Dateien überprüft und alles schien in Ordnung zu sein, einfach nicht zu bauen. Offensichtlich führt VS2017 Informationen zur .Net-Version ein, aber nicht offensichtlich.

Hoffentlich hilft meine Lösung jemandem.

0

Wenn beide Services in derselben Lösung enthalten sind, müssen Sie nur zwei Aktionen ausführen, sofern beide Services funktionieren.

  • Fügen Sie den Verweis auf das Projekt hinzu, das den von Ihnen benötigten Webserver enthält. Tun Sie dies auf der Registerkarte "Projekte".
  • Konfigurieren Sie Ihren Hauptdienst web.config folgendermaßen:

    <services>
      <service name="MyCurrentProject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="MyCurrentProject.Service"/>
      </service>
      <service name="AnotherPoject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="AnotherPoject.Service"/>
      </service>
    
0
Manuel Roldan

In meinem Fall war der Code korrekt, die Schnittstelle hatte das richtige [ServiceContract] -Tag und der .config-Endpunkt hatte den richtigen Schnittstellennamensraum, aber das Projekt mit der Schnittstelle musste neu kompiliert werden, damit das andere Projekt, das das hatte Die .config-Datei würde eine aktuelle .dll des ersten Projekts in ihrem bin-Ordner erhalten. Der Code neu zu kompilieren ist also die Antwort, um Visual Studio glücklich zu machen.

0
SED