wcf - example - Dies könnte daran liegen, dass die Service-Endpunktbindung das HTTP-Protokoll nicht verwendet




https (14)

Ich habe einen WCF-Dienst auf meinem lokalen Computer. Ich lege es auf die Server und erhalte den folgenden Fehler:

Beim Empfangen der HTTP-Antwort unter http://xx.xx.x.xx:8200/Services/WCFClient.svc ein Fehler aufgetreten. Dies könnte daran liegen, dass die Service-Endpunktbindung das HTTP-Protokoll nicht verwendet. Dies kann auch daran liegen, dass ein HTTP-Anforderungskontext vom Server abgebrochen wird (möglicherweise aufgrund des Herunterfahrens des Dienstes). Weitere Informationen finden Sie in den Serverprotokollen.]

Ich bin in der URL zum Service gegangen und es funktioniert richtig. Alles, was ich für die Funktion mache, ist die Rückgabe einer Zeichenkette an einen Image-Namen, so dass die Daten, die übergeben werden, nicht viel sind. Ich habe das Protokoll verfolgt und es gibt mir die gleichen Informationen. Hier ist meine Client-Konfiguration:

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                  maxNameTableCharCount="2147483647" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient" 
    address="http://localhost:4295/Services/WCFClient.svc"
    binding="basicHttpBinding" 
    bindingConfiguration="basicHttpBinding_IWCFClient" 
    behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
    contract="WCFClient.IWCFClient" />

Hier ist meine Serverkonfiguration:

<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
    name="WCFGraphicManagementTool.Services.WCFClient">
   <endpoint name="basicHttpBinding_IWCFClient"
       address="" 
       binding="basicHttpBinding" 
       contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
   <endpoint 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483647" />
   <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
                      maxConcurrentInstances="120" />
   <serviceMetadata httpGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>

Wäre es eine Einstellung auf dem Server, da es auf meinem lokalen Rechner funktioniert?


Auch hatte dieses Problem und es war zu vergessen, mein Modell mit DataContract und DataMember Attribute zu dekorieren


Dies ist möglicherweise nicht relevant für Ihr spezifisches Problem, aber die von Ihnen erwähnte Fehlermeldung hat viele Ursachen, von denen einer einen Rückgabetyp für einen [OperationContract] verwendet, der entweder abstrakt, Schnittstelle oder dem WCF-Clientcode nicht bekannt ist.

Überprüfen Sie den Post (und die Lösung) unten

https://.com/a/5310951/74138


Dieser Fehler kann aufgrund von Vertragskonflikten auftreten. Betrachten Sie die dreistufige Anwendung unten ...

UI-Ebene
|
Prozessschicht
|
Datenzugriffsschicht
-> Vertrag zwischen Prozess- und UI-Schicht hat die gleiche Aufzählung mit fehlenden (Onhold = 3). Enum: Start = 1, Stop = 2. -> Vertrag zwischen Datenzugriff und Prozessschicht hat enum Enum: Start = 1, Stop = 2, Onhold = 3.

In diesem Fall erhalten wir den gleichen Fehler in der Prozessschichtantwort.

Derselbe Fehler tritt bei anderen Vertragskonflikten in mehrschichtigen Anwendungen auf.


Für mich sind die Lösungen dieses Fehlers sehr merkwürdig. Es war das Problem der Portadresse von EndpointAddress . In Visual Studio müssen die Port-Adresse Ihrer Datei (zB Service1.svc) und die Port-Adresse Ihres WCF-Projekts denen entsprechen, die Sie in EndpointAddress angeben. Lassen Sie mich diese Lösung im Detail beschreiben.

Es gibt zwei Schritte, um die Portadressen zu überprüfen.

  1. Klicken Sie in Ihrem WCF-Projekt mit der rechten Maustaste auf Ihre Servicedatei (zB Service1.svc) -> wählen Sie Jetzt im Browser http://localhost:61122/Service1.svc Sie haben eine URL wie http://localhost:61122/Service1.svc Sie sich jetzt Ihre http://localhost:61122/Service1.svc als ein 61122

  2. Klicken Sie auf Ihr Projekt -> dann wählen Sie Eigenschaften -> gehen Sie zum Web Tab -> Jetzt im Serverbereich -> wählen Sie Visual Studio Development Server -> wählen Sie Spezifischer Port und geben Sie die Portadresse, die wir früher von unserem Service1 finden. SVC-Service. Das ist (61122) .

Früher habe ich eine andere Portadresse. Nach der korrekten Angabe der Portadresse, die ich in EndpointAddress angegeben habe , wurde mein Problem gelöst.

Ich hoffe, dass dies Ihr Problem gelöst hat.


Ich denke, der beste Weg, dies zu lösen, besteht darin, den Fehlerhinweisen zu folgen und nach Serverprotokollen zu suchen. Um Protokolle zu aktivieren, habe ich hinzugefügt

 <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

Dann gehen Sie zu c: \ logs \ TracesServ_ce.svclog Öffnen Sie es mit Microsoft Service Trace Viewer. Und sehen Sie, was das Problem wirklich ist.


Ich habe das Problem herausgefunden. Es endete damit, dass ein Pfad zu meiner Konfigurationsdatei falsch war. Die Fehler für WCF sind manchmal so hilfreich.


Ich habe einige Tage damit gekämpft und jede Antwort aus diesem Post und vielen anderen versucht und meine Lösung geteilt, weil die Symptome die gleichen waren, aber das Problem war anders.

Das Problem bestand darin, dass der App-Pool mit einem Speicherlimit konfiguriert war und nur nach einem variablen Zeitraum wiederverwendet wurde.

Hoffe das hilft jemand anderem!
Schöne Grüße,



Ich hatte dieses Problem, weil ich meinen WCF-Dienst konfigurierte, um eine System.Data.DataTable zurückzugeben.

Es funktionierte gut in meiner Test-HTML-Seite, aber explodierte, wenn ich dies in meine Windows Form-Anwendung legte.

Ich musste hineingehen und die Unterschrift des Betriebsvertrags des Dienstes von DataTable zu DataSet ändern und die Daten entsprechend zurückgeben.

Wenn Sie dieses Problem haben, möchten Sie möglicherweise einen zusätzlichen Betriebsvertrag zu Ihrem Dienst hinzufügen, damit Sie sich keine Gedanken darüber machen müssen, ob Sie Code brechen, der auf vorhandenen Diensten beruht.


In meinem Fall wurde der Fehler generiert, weil einer meiner komplexen Typen eine Eigenschaft ohne festgelegte Methode hatte.

Der Serializer warf und Ausnahme wegen dieser Tatsache. Interne Set-Methoden hinzugefügt und alles hat gut funktioniert.

Der beste Weg, um herauszufinden, warum dies passiert (meiner Meinung nach), ist das Protokollieren der Ablaufverfolgung.

Ich habe dies erreicht, indem ich den folgenden Abschnitt zu meiner web.config hinzugefügt habe:

    <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
        <listeners>
          <add name="traceListener"
               type="System.Diagnostics.XmlWriterTraceListener"
               initializeData= "c:\log\Traces.svclog" />
          <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
        </listeners>
      </source>
      <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="traceListener"
               type="System.Diagnostics.XmlWriterTraceListener"
               initializeData= "c:\log\Traces.svclog" />
          <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
        </listeners>
      </source>
    </sources>
    <trace autoflush="true" />
  </system.diagnostics>

Einmal eingestellt, lief ich meinen Client, bekam eine Ausnahme und überprüfte die 'Traces.svclog' Datei. Von dort musste ich nur die Ausnahme finden.


Mein Problem war zu viele Elemente wurden zwischen Client und Server übergeben. Ich musste diese Einstellungen im Verhalten auf beiden Seiten ändern.

<dataContractSerializer maxItemsInObjectGraph="2147483646"/>

Mein Problem war, dass der Rückgabetyp meines Dienstes String war. Aber ich habe eine Zeichenfolge vom Typ xml zurückgegeben:

<reponse><state>1</state><message>Operation was successfull</message</response>

Also wurde ein Fehler geworfen.


Weitere Informationen zu diesem Problem finden Sie unter: Eine bestehende Verbindung wurde vom Remote-Host - WCF zwangsweise geschlossen

Mein Problem war, dass meine Datenübertragungsobjekte zu komplex waren. Beginnen Sie mit einfachen Eigenschaften wie public long Id { get; set; } public long Id { get; set; } public long Id { get; set; } und sobald du das funktionierst, fang an, nach Bedarf zusätzliche Sachen hinzuzufügen.


in meinem Fall

Mein Dienst hat die Funktion, download Files

und dieser Fehler trat nur beim Versuch auf, Big Files herunterzuladen

maxRequestLength ich diese Antwort gefunden , um maxRequestLength in maxRequestLength auf den benötigten Wert zu web.config

Ich weiß, das ist komisch, aber das Problem ist gelöst

Wenn Sie keine Upload- oder Download-Vorgänge durchführen, hilft Ihnen diese Antwort möglicherweise nicht weiter





wcf-endpoint