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


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

Beim Empfangen der Nachricht ist ein Fehler aufgetreten   HTTP-Antwort an    http: //xx.xx.x.xx: 8200 / Dienste / WCFClient.svc.   Dies könnte auf den Service zurückzuführen sein   Endpunktbindung, die das HTTP nicht verwendet   Protokoll. Dies könnte auch an einem sein   HTTP-Anfragekontext wird abgebrochen von   der Server (möglicherweise wegen der   Service heruntergefahren). Siehe Server   Protokolle für weitere Details.]

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?


75
2018-05-03 14:24


Ursprung


Antworten:


Ich denke, dass es Serialisierungsproblem gibt, können Sie genauen Fehler finden, nur unter Code in Service-Konfiguration in hinzufügen müssen <configuration> Sektion.

Nach dem Update der Konfiguration "App_tracelog.svclog" Datei wird erstellt, wo Ihr Dienst existiert, muss nur geöffnet werden .svclog Datei und finden Sie rote Farbe Linie auf der linken Seite, die Fehler ist und sehen Sie die Beschreibung für weitere Informationen.

Ich hoffe, dass dies hilft, Ihren Fehler zu finden.

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
    </sharedListeners>
  </system.diagnostics>

81
2018-01-23 14:10



Ich hatte dieses Problem "Dies könnte daran liegen, dass die Bindung des Dienstendpunkts das HTTP-Protokoll nicht verwendet" und der WCF-Dienst heruntergefahren wurde (in einem Entwicklungscomputer)

Ich habe herausgefunden: In meinem Fall war das Problem wegen Enums,

Ich habe das gelöst

    [DataContract]
    [Flags]
    public enum Fruits
    {
        [EnumMember]
        APPLE = 1,
        [EnumMember]
        BALL = 2,
        [EnumMember]
        ORANGE = 3 

    }

Ich musste meine Enums mit DataContract, Flags und allen einzelnen Enumerationselementen mit EnumMember-Attributen dekorieren.

Ich habe das nach dem Betrachten gelöst msdn Referenz:


72
2017-08-11 18:56



Ich hatte denselben Fehler und das Problem war Serialisierung. Mit dem Service Trace Viewer konnte ich das eigentliche Problem finden http://msdn.microsoft.com/en-us/library/ms732023.aspx und löste es einfach. Vielleicht wird das jemandem helfen.


16
2018-01-26 08:06



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.


10
2018-01-29 19:09



Lösung mit DataContract, Flags for Enums sieht ein bisschen hässlich aus. In meinem Fall wurde das Problem gelöst, indem etwas wie "NotSet = 0" in enum eingefügt wurde:

public enum Fruits
{
  UNKNOWN = 0,
  APPLE = 1,
  BALL = 2,
  ORANGE = 3 
}

8
2018-02-25 06:45



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.


1
2018-05-16 13:42



Ich habe diesen Fehler durch einen Zirkelverweis im Objektgraphen verursacht. Wenn ein Zeiger auf das übergeordnete Objekt von einem untergeordneten Element eingefügt wird, führt dies dazu, dass der Serializer eine Schleife ausführt und letztendlich die maximale Nachrichtengröße überschreitet.


1
2018-03-12 16:47