2015-02-27 6 views
0

Сервер WCF размещен на службе Windows. Мы получаем следующую ошибку Sporadically. Я уверен, что это не ошибка приложения и вызывается в рамках WCF Framework при закрытии соединения. Кто-то видел это раньше, и ему повезло, что он поделился. Любая помощь высоко ценится.NullReferenceException: на сервере WCF

System.NullReferenceException: Object reference not set to an instance of an object. 

Server stack trace: 
    at System.Threading.Overlapped.Free(NativeOverlapped* nativeOverlappedPtr) 
    at System.ServiceModel.Channels.OverlappedContext.Free() 
    at System.ServiceModel.Channels.OverlappedContext.FreeOrDefer() 
    at System.ServiceModel.Channels.SocketConnection.Abort(TraceEventType traceEventType, String timeoutErrorString, TransferOperation transferOperation) 
    at System.ServiceModel.Channels.SocketConnection.Abort() 
    at System.ServiceModel.Channels.DelegatingConnection.Abort() 
    at System.ServiceModel.Channels.ConnectionPool.AbortItem(IConnection item) 
    at System.ServiceModel.Channels.IdlingCommunicationPool\`2.IdleTimeoutEndpointConnectionPool.AbortItem(TItem item) 
    at System.ServiceModel.Channels.CommunicationPool\`2.EndpointConnectionPool.ReturnConnection(TItem connection, Boolean connectionIsStillGood, TimeSpan timeout) 
    at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout) 
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 

Ниже приводится выдержка с клиентской стороны.

public DateTime GetLastReferenceDataRefreshedTime() 
    { 
     RfaReferenceServiceProxy serviceProxy = null; 
     try 
     { 
      serviceProxy = SafeProxy(); 
      return serviceProxy.Channel.GetLastReferenceDataRefreshedTime(); 
     } 
     catch (CommunicationException exception) 
     { 
      Log.Error("Retrying after communication exception:" + exception.Message); 
      return SafeProxy().Channel.GetLastReferenceDataRefreshedTime(); 
     } 
    } 
+0

Попробуйте заглянуть во внутреннее исключение, чтобы получить информацию о том, где было исключено исключение –

+0

Вы работаете с асинхронными? Возможно, что что-то другое зависит от соединения в отдельном потоке, и поэтому вы получаете непредсказуемое поведение. Там может быть состояние гонки, и если вы закрываете соединение до того, как другой поток выполнит свою процедуру, это произойдет. Просмотрите свой код и убедитесь, что вы проверяете «null». В любом случае, мы не можем сказать без кода. –

+0

Можете ли вы опубликовать код службы, когда вы закрываете соединение, пожалуйста? –

ответ

1

Вы вызываете метод на канале из блока catch. Это нецелесообразно, и я был бы удивлен, если это не причина вашей проблемы.

Если SafeProxy().Channel возвращает значение null, это приведет к наблюдаемому поведению. Невозможно узнать, не видя содержимого метода SafeProxy.

Смежные вопросы