2017-03-06 10 views
0

우리는 최근에 프로그래밍 방식으로 WCF 바인딩을 설정하고 프록시를 생성하기 위해 codebase을 전환했습니다. ServiceReferences.clientconfig에서 구성을 정의하지 않았습니다. 그 이후로, 일부 긴 WCF 호출은 Silverlight에서 시간 초과되었습니다. 이유는 모르겠습니다. 바인딩에서 모든 시간 제한을 24 시간으로 설정했습니다. 문제를 진단하는 방법에 대한 제안이 필요합니다.Silverlight WCF Timeout

처음에는 몇 분 후에 오류가 발생하지만 서버 측의 코드가 계속되어 결국 성공적으로 완료되기 때문에 문제가 클라이언트 측에서 시간 초과라고 생각했습니다. 그러나 나는 지금 이것에 대해 완전히 확신하지 못한다. 나는 Kestrel 로그 창을보고 있었고 서버 측에서 작업이 계속되고 있었음에도 불구하고 요청이 Silverlight에서 오류가 발생한 것과 동시에 완료되었다고 나타났습니다. 그러나 서버 측에서 OperationTimeout을 설정하는 데 필요한 정보는 없습니다. 다음은 서버 측의 바인딩입니다.

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

다음은 클라이언트 측에서 바인딩을 만드는 방법을 나타내는 코드입니다. 여기에 내가 누락 된 다른 코드가 있는지 알려주십시오. 프록시가이 바인딩 세트를 가져 오도록이 코드를 디버깅했습니다. ;

InnerChannel.OperationTimeout = 새로운 시간 범위 (24, 0, 0) :

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

은 또한 프록시의 생성자에서이 줄을 넣었습니다 당신이 실버 라이트에 있기 때문에

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

답변

0

, 기회는 이것이 DomainService 찾을 수없는 오류가 있습니다

오류는 뭔가 클라이언트 시간 초과 서버 나에 잘못되면 항상 반환이 아닌 Descript, 이하 오류입니다 . 합리적으로 공통적 인 문제이며 서버의 잘못된 구성을 나타냅니다. Fiddler를 실행하고 실패한 URL을보고 서버 측의 이전 버전과 비교할 수 있어야합니다.

바인딩을 신속히 살펴보면 서비스에 대해 정의 된 끝점을 볼 수 없습니다.