Question

J'ai un service WCF fonctionne bien sur ma machine locale. Je l'ai mis sur les serveurs, et je reçois l'erreur suivante:

Une erreur est survenue lors de la réception de la réponse HTTP http: //xx.xx.x.xx: 8200 / Services / WCFClient.svc . Cela pourrait être dû au service point final contraignant ne pas utiliser le protocole HTTP protocole. Cela pourrait aussi être dû à une contexte de la requête HTTP avortent par le serveur (peut-être en raison de la service de fermeture). Voir serveur journaux pour plus de détails.]

Je suis allé au service dans l'URL et fonctionne correctement. Tout ce que je fais pour la fonction renvoie une chaîne à un nom d'image, de sorte que les données transmises ne sont pas beaucoup. J'ai tracé le journal et il me donne les mêmes informations. Voici ma config client:

<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" />

Voici ma config serveur:

<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>

Serait-il un paramètre sur le serveur car il fonctionne sur ma machine locale?

Était-ce utile?

La solution 7

Je me suis le problème. Il a fini par être un chemin vers mon fichier de configuration a eu tort. Les erreurs de WCF sont parfois si utiles.

Autres conseils

Je pense qu'il ya un problème de sérialisation, vous pouvez trouver l'erreur exacte juste besoin d'ajouter le code ci-dessous dans la configuration de service dans la section <configuration>.

Après la mise à jour fichier config "App_tracelog.svclog" va créer, où votre service ne sont pas juste besoin de fichier .svclog ouvert et trouver la ligne de couleur rouge sur le panneau latéral gauche qui est l'erreur et voir sa description pour plus d'informations.

J'espère que cela vous aidera à trouver votre erreur.

<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>

J'ai eu ce problème « Cela pourrait être dû au point d'extrémité de service liant ne pas utiliser le protocole HTTP » et le service WCF fermerait (dans une machine de développement)

J'ai compris: dans mon cas, le problème est à cause de énumérations,

Je résolus en utilisant cette

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

    }

Je devais décorer mes énumérations avec DataContract, drapeaux et tous chacun des membres enum avec des attributs EnumMember.

Je résolu ce après avoir regardé cette msdn Référence :

J'ai eu cette même erreur et le problème était sérialisation. J'ai réussi à trouver le problème réel en utilisant Viewer Service Trace http://msdn.microsoft. com / fr-fr / bibliothèque / ms732023.aspx et résolu facilement. Peut-être que ce quelqu'un aide.

Dans mon cas, l'erreur a été générée parce que l'un de mes types complexes avaient une propriété sans méthode de jeu.

Le sérialiseur a lancé une exception en raison de ce fait. Ajout des méthodes de réglage interne et tout bien travaillé.

La meilleure façon de savoir pourquoi cela se passe (à mon avis) est de permettre l'enregistrement de trace.

J'atteint en ajoutant la section suivante à mon web.config:

<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>

Une fois réglé, j'ai couru mon client, a exception et ont vérifié le dossier « Traces.svclog ». A partir de là, je ne devais trouver l'exception.

Solution avec DataContract, drapeaux pour Enums ressemble un peu laid. Dans mon cas problème résolu en ajoutant quelque chose comme « NotSet = 0 » en ENUM:

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

Je faisais face à la même question et résolu avec le code ci-dessous. (Le cas échéant problème de connectivité TLS)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

S'il vous plaît coller cette ligne avant d'ouvrir le canal client.

Je l'ai vu cette erreur provoquée par une référence circulaire dans le graphe d'objet. Y compris un pointeur vers l'objet parent d'un enfant provoque la sérialiseur en boucle, et finalement dépasser la taille maximale des messages.

J'ai eu ce problème parce que je configuré mon service WCF pour retourner un System.Data.DataTable.

Il a bien fonctionné dans mon test page HTML, mais a fait exploser quand je mets cela dans mon application Windows Form.

Je devais aller et changer la signature du contrat d'exploitation de service de DataTable à DataSet et renvoyer les données en conséquence.

Si vous avez ce problème, vous pouvez ajouter un montant supplémentaire de contrat d'exploitation à votre service afin que vous n'avez pas à vous soucier du code de rupture qui se fondent sur les services existants.

Cela pourrait être dû à plusieurs raisons; ci-dessous sont quelques-uns de ceux-ci:

  1. Si vous utilisez des objets de contrat de données complexes (ce qui signifie objet personnalisé avec des objets personnalisés plus d'enfants), assurez-vous que vous avez tous les objets personnalisés décorés avec des attributs DataContract et DataMember
  2. Si votre contrat de données des objets d'héritage d'utilisation, assurez-vous que toutes les classes de base possède les attributs DataContract et DataMember. , Vous devez également les classes de base spécifient les classes dérivées de la [KnownType (typeof (BaseClassType))] attribut ( vérifier plus d'informations sur cette ).

  3. Assurez-vous que toutes vos propriétés de l'objet du contrat de données ont à la fois des propriétés get et set.

Mon problème était trop nombreux articles ont été passé entre le client et le serveur. Je devais modifier ces paramètres dans le comportement des deux côtés.

<dataContractSerializer maxItemsInObjectGraph="2147483646"/>

Je pense que la meilleure façon de résoudre ce problème est de suivre les conseils d'erreur, donc à la recherche pour les journaux de serveur. Pour activer les journaux, j'ai ajouté

 <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>

Ensuite, vous allez à c: \ logs \ TracesServ_ce.svclog ouvrir avec Microsoft visionneuse de trace de service. Et voir ce que le problème est vraiment.

Pour plus de perspicacité dans cette question, voir aussi: Une connexion existante a été fermée de force par l'hôte distant - WCF

Mon problème a fini par être que mes objets de transfert de données sont trop complexes. Démarrer withsimple propriétés comme public long Id { get; set; } et une fois que vous obtenez que le travail de commencer à ajouter des choses supplémentaires au besoin.

Mon problème était, ce type de retour de mon service était chaîne. Mais je suis retourné chaîne de type xml:

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

erreur a été levée.

Cette erreur peut être à cause de non-concordance du contrat. Considérons les trois applications en couches ci-dessous ...

interface utilisateur couche
|
Couche processus
|
Accès aux données couche
-> contrat entre la couche processus et l'interface utilisateur a le même enum avec manquant (onhold = 3). Enum: Start = 1, Arrêt = 2. -> Contrat entre l'accès aux données et la couche de processus a ENUM Enum: Start = 1, Arrêt = 2, onhold = 3

.

Dans ce cas, nous allons obtenir la même erreur en réponse de la couche de processus.

La même erreur vient dans d'autres non-concordance de contrat en application de plusieurs couches.

Cela pourrait ne pas être pertinents à votre problème spécifique, mais le message d'erreur que vous avez mentionné a de nombreuses causes, l'un d'entre eux utilise un type de retour pour un [OperationContract] qui est soit abstraite, interface, ou non connue du client WCF code.

Vérifiez la poste (et solution) ci-dessous

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

J'ai lutté avec cela pour quelques jours et a essayé toutes les réponses de ce poste et bien d'autres et de partager ma solution parce que les symptômes étaient les mêmes, mais le problème était différent.

Le problème est que le pool d'application a été configuré avec une limite de mémoire et juste sont recyclés après une période variable de temps.

Hope this helps quelqu'un d'autre!
Salutations,

dans mon cas

mon service a la fonction à download Files

et cette erreur ne s'affichent à essayer de télécharger Big Files

donc j'ai trouvé cette réponse pour augmenter maxRequestLength à la valeur nécessaire dans web.config

Je sais que ce bizarre, mais le problème est résolu

si vous ne faites pas d'opérations de chargement ou de téléchargement peut-être cette réponse ne vous aidera pas

Il y avait également cette question et il est dû à oublier de décorer mon modèle avec des attributs DataContract et DataMember

Pour moi, les solutions de cette erreur très étrange. Il a été la question de l'adresse de port de EndpointAddress . Adresse du port studio visuel de votre fichier (par exemple Service1.svc) et l'adresse de port de votre projet WCF doit être le même qui vous donne dans EndpointAddress . Permettez-moi de vous décrire cette solution en détail.

Il y a deux étapes pour vérifier les adresses de port.

  1. Dans votre droite projet WCF cliquez sur votre fichier de services (par exemple Service1.svc) -> que de sélectionner Afficher dans le navigateur maintenant dans votre navigateur vous avez l'url http: // localhost: 61122 / Service1.svc pour noter maintenant votre adresse de port comme un 61122

  2. Righ cliquez sur votre projet WCF -> que de sélectionner Propriétés -> aller à l'onglet Web -> Maintenant dans Serveurs -> sélectionnez Utiliser le développement Visual studio serveur -> sélectionnez Port spécifique et donner l'adresse du port que nous avons précédemment trouver de notre service Service1.svc. C'est (61122) .

Un peu plus tôt, j'ai une autre adresse de port. Après avoir spécifié l'adresse du port correctement que je donne dans EndpointAddress , mon problème a été résolu.

J'espère que cela pourrait être résolu votre problème.

Pour résoudre ce problème, nous avons dû changé l'identité AppPool à un compte administrateur .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top