2017-03-06 3 views
0

Wir haben kürzlich die Codebasis geändert, um WCF-Bindungen programmgesteuert festzulegen und Proxys zu generieren. Wir haben die Konfiguration in ServiceReferences.clientconfig nicht mehr definiert. Seitdem haben einige lange WCF-Anrufe in Silverlight gezögert und ich habe keine Ahnung warum. Ich habe alle Timeouts in den Bindungen auf 24 Stunden eingestellt. Ich brauche einige Vorschläge zur Diagnose des Problems.Silverlight WCF-Zeitüberschreitung

Zuerst dachte ich, dass das Problem eine Zeitüberschreitung auf der Clientseite war, weil der Fehler nach ein paar Minuten auftritt, aber der Code auf der Serverseite fährt fort und wird schließlich erfolgreich abgeschlossen. Aber ich bin mir jetzt nicht ganz sicher. Ich beobachtete das Kestrel-Protokollfenster und stellte fest, dass die Anforderung gleichzeitig mit dem Auftreten des Fehlers in Silverlight abgeschlossen wurde, obwohl der Vorgang auf der Serverseite fortgesetzt wurde. Aber ich finde keine Informationen über die Einstellung der Operation Timeout auf der Serverseite. Hier ist die Bindung auf der Serverseite:

private static CustomBinding CreateCustomBinding() 
{ 
    var httpTransportBindingElement = new HttpTransportBindingElement 
    { 
     MaxBufferPoolSize = 2147483647, 
     MaxBufferSize = 2147483647, 
     MaxReceivedMessageSize = 2147483647 
    }; 

    var bindingElements = new BindingElementCollection(); 
    var binaryMessageEncodingBindingElement = new BinaryMessageEncodingBindingElement 
    { 
     MaxReadPoolSize = 2147483647, 
     MaxSessionSize = 2147483647, 
     MaxWritePoolSize = 2147483647, 
     ReaderQuotas = new XmlDictionaryReaderQuotas 
     { 
      MaxDepth = 2147483647, 
      MaxStringContentLength = 2147483647, 
      MaxArrayLength = 2147483647, 
      MaxBytesPerRead = 2147483647, 
      MaxNameTableCharCount = 2147483647 
     } 
    }; 

    bindingElements.Add(binaryMessageEncodingBindingElement); 
    bindingElements.Add(httpTransportBindingElement); 

    var binding = new CustomBinding(bindingElements) 
    { 
     Name = "UserNameBinding", 
     CloseTimeout = new TimeSpan(24, 0, 0), 
     OpenTimeout = new TimeSpan(24, 0, 0), 
     ReceiveTimeout = new TimeSpan(24, 0, 0), 
     SendTimeout = new TimeSpan(24, 0, 0) 
    }; 
    return binding; 
} 

Hier ist der Code für wie die Bindung auf der Clientseite erstellt wird. Lassen Sie es mich wissen, wenn es einen anderen Code gibt, der hier relevant ist, den ich vermisse. Ich habe diesen Code debugged, um sicherzustellen, dass der Proxy diese Bindungseinstellung erhält.

public static Binding GetWCFBinding(bool isHttps) 
    { 
     var binding = new CustomBinding 
     { 
      CloseTimeout = new TimeSpan(24, 00, 00), 
      OpenTimeout = new TimeSpan(24, 00, 00), 
      ReceiveTimeout = new TimeSpan(24, 00, 00), 
      SendTimeout = new TimeSpan(24, 00, 00)     
     }; 

     var binaryMessageEncodingBindingElement = new BinaryMessageEncodingBindingElement(); 

     binding.Elements.Add(binaryMessageEncodingBindingElement); 

     binding.Elements.Add(isHttps 
      ? new HttpsTransportBindingElement() 
      { 
       MaxBufferSize = int.MaxValue, 
       MaxReceivedMessageSize = int.MaxValue, 
       TransferMode = TransferMode.Buffered 
      } 
      : new HttpTransportBindingElement() 
      { 
       MaxBufferSize = int.MaxValue, 
       MaxReceivedMessageSize = int.MaxValue, 
       TransferMode = TransferMode.Buffered 
      }); 

     return binding; 
    } 

Ich habe auch diese Zeile im Konstruktor des Proxy setzen:

InnerChannel.OperationTimeout = new Timespan (24, 0, 0);

Der Fehler ist dies nicht näher bezeichneten Fehler, der immer wieder, wenn etwas auf dem Server oder die Client-mal schief geht aus:

Module: Adapt.Presentation.Xivic.CodeGeneration Exception Message: The remote server returned an error: NotFound. Time: 6/03/2017 4:17:55 PM Stack Trace: ThrowForNonSuccess at offset 90 in file:line:column :0:0 HandleNonSuccess at offset 87 in file:line:column :0:0 GetResult at offset 30 in file:line:column :0:0 MoveNext at offset 525 in file:line:column :0:0 Full Exception: System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.b__9(Object sendState) at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.b__0(Object sendState) --- End of inner exception stack trace --- at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) --- End of inner exception stack trace --- at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task) at Microsoft.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Adapt.Presentation.Xivic.CodeGeneration.d__15.MoveNext()

Antwort

0

Da Sie auf Silverlight sind, stehen die Chancen, dies ist ein DomainService Fehler nicht gefunden . Es ist ein relativ häufiges Problem und deutet auf Fehlkonfigurationen auf dem Server hin. Sie sollten Fiddler starten und prüfen können, welche URL fehlschlägt, und diese mit Ihrer vorherigen Version auf der Serverseite vergleichen.

Wenn Sie Ihre Bindungen schnell durchsuchen, kann ich keinen Endpoint für Ihren Dienst definieren.