Вопрос

У меня есть веб-служба, размещенная в IIS в другом ящике, и служба WCF, размещенная в службе Windows, в другом ящике (N-уровневый подход).Здесь веб-служба является клиентом службы WCF.Запрос на отправку файла поступает в веб-службу, размещенную в IIS, а эта веб-служба, размещенная в IIS, в ответ вызывает службу WCF и выполняет фактическую загрузку.Все идет нормально.После завершения загрузки служба WCF выполняет обратный вызов (я сохранил обратные вызовы в словаре и использовал (InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)).Служба WCF отправляет обратный вызов.В средстве просмотра трассировки создается впечатление, что ASP.NET получил обратный вызов, но страница загрузки в браузере (это конечный пользователь) зависает навсегда.Я использую привязку ChunkingChannel от larsw.

Прежде всего, возможно ли вообще реализовать вышеуказанный сценарий, как упомянул Джон Саундарс в этой ссылке:

Что на самом деле делает «OperationContext.Current.GetCallbackChannel»?

Спасибо за помощь.

Это было полезно?

Решение 2

Это странно, я перезагрузил компьютер и теперь получаю следующее в средстве просмотра трассировки на стороне клиента (ASP.NET), а также страница теперь не зависает (не отвечает).Сообщение, которое меня больше всего беспокоит, — это его внутреннее исключение:System.NullReferenceException, mscorlib и говорит, что ссылка на объект не...

Я попробовал использовать консольное приложение в качестве клиента службы WCF.Обратный звонок работает отлично.Это происходит только тогда, когда я размещаю свой веб-сайт в IIS и вызываю службу WCF для загрузки файла (которая в свою очередь перезванивает клиенту, чтобы уведомить, что загрузка была/не успешной).

(Я использую HttpChunkingBinding).Есть идеи?

System.runtime.fatalexception, System.Runtime.DiversialInstancing, версия = 4.0.0.0, культура = нейтральная, publickeyToken = 31bf3856ad364e35 Справочник объекта не установлен на экземпляр объекта.at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) at System.ServiceModel.Dispatcher.ChannelHandler .DispatchandReleAsePump (запрос requestContext, Boolean CleanThread, OperationContext CurrentOperationContext) AT System.ServiceModel.Dispatcher.ChannelHandler.HandLereQuest (запрос requestContext, OperationContext CurrentOperationContext) на System.ServiceModel.Dispatcher.ChallanceHandlermultime. Asyncthunk.unhandledexceptionframe (результат iAsyNcresult) в System.serviceModel.diagnostics.traceutility. <> C_DisplayClass4.<CallbackGenerator>b_2.1.AsyncQueueReader.Set(Item item) at System.Runtime.InputQueue1.Dispatch() at System.ServiceModel.Channels.ReliableDuplexSessionChannel.ProcessDuplexMessage(WsrmMessageInfo info) at System.ServiceModel.Channels.ReliableDuplexSessionChannel.HandleReceiveComplete(IAsyncResult result) at System.ServiceModel.Channels.ReliableDuplexSessionChannel.OnReceiveCompletedStatic(IAsyncResult result) at System. Runtime.fx.asyncthunk.unhandledExceptionFrame (результат iAsyncresult) на System.Runtime.Asyncresult.complete (логический заполненныйсинхронно) на System.serviceModel.Channels.ReliableChannerBinder1.InputAsyncResult1.oninputComplete (результат iAsyNcresult) в system.runtime.fx.asyncthunk.unhandledexceptionFrame (результат iAsyncresult) в System.serviceModel.diagnostics.Traceutility. <> C_DisplayClass4.<CallbackGenerator>b_2.1.AsyncQueueReader.Set(Item item) at System.Runtime.InputQueue1.dispatch () at system.runtime.actionitem.defaultactionitem.invoke () at system.runtime.actionitem.callbackhelper.invokewithoutContext (Object Option.Runtime.IotHreadscheduler.scheduleDoverLated.iocallback (uitHodeCode32 numboTes* nature* naturetes* natuftes* natuftes* natuftes* natuftes* natuftes* natuftes* natuptes* NativeOverlated) At System.Runtime.FX.IOCOPLUTIONTHUNK.UNHandleDexceptionFrame (uint32, Uint32 BytesRead, NativeOverlapped* NativeOverlapped) At System.Threading._IOCOMPLOTECALLCALLCALK.PerformocAltureCallback (uint32 erryCode, uInt32 numbytes, cnitive -poverlectioncallback (uint32, uint32 numbytes.В экземпляре объекта не задана ссылка на объект.---> System.NullReferenceException:В экземпляре объекта не задана ссылка на объект.at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext) at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext) at System.Web.AspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state) at System.Web.AspNetSynchronizationContext.CallCallback( Sendorpostcallback обратный вызов, состояние объекта) at system.servicemodel.dispatcher.imtabledispatchruntime.processmessage4 (MessagerPC & RPC) --- Конец внутреннего стека исключения. .Dispatcher.immutabledispatchruntime.processmessage31 (messagerpc & rpc) at system.servicemodel.dispatcher.messagerpc.process (boolean isoperationContextSet) на system.servicemodel.dispatcher.channelhandler.dispatchersetepertempertectrectrectr ServiceModel.dispatcher .ChannelHandler.HandLEREQUEST (запрос requestContext, OperationContext CurrentOperationContext) at System.ServiceModel.Dispatcher.ChannelHandler.AsyncmessagePump (йасинкрестулт) на system.runtime.fx.asyncthunk.unhandledexceptionFrame (iaSyNcresult result. C_DisplayClass4.<CallbackGenerator>b_2.
в System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) at System.Runtime.InputQueue1.dispatch () at system.servicemodel.channels.reliableplexsessionChannel.processDuplexmessage (wsrmmessageinfo info) в System.serviceModel.Channels.ReliaBleduplexSessionChannel.handlereCeiveceeVeceeVeceeVecterePlectupeRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepleseRepletherePlexEresseReplyPle.ChoundEl eivecopletedStatic (результат IASINCRESULT) в системе. Runtime.fx.asyncthunk.unhandledExceptionFrame (результат iAsyncresult) на System.Runtime.Asyncresult.complete (логический заполненныйсинхронно) на System.serviceModel.Channels.ReliableChannerBinder1.InputAsyncResult1.oninputComplete (результат iAsyNcresult) в system.runtime.fx.asyncthunk.unhandledexceptionFrame (результат iAsyncresult) в System.serviceModel.diagnostics.Traceutility. <> C_DisplayClass4.<CallbackGenerator>b_2.
в System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) at System.Runtime.InputQueue1.dispatch () at system.runtime.actionitem.defaultactionitem.invoke () at system.runtime.actionitem.callbackhelper.invokewithoutContext (Object Option.Runtime.IotHreadscheduler.scheduleDoverLated.iocallback (uitHodeCode32 numboTes* nature* naturetes* natuftes* natuftes* natuftes* natuftes* natuftes* natuftes* natuptes* NativeOverlapped) At System.Runtime.FX.IOCOPLUTIOGHTHUNK.UNHANDLEDEXCEPTIONFRAME (EINT32 ERROUS, UINT32 BAYTESREAD, CANTIPLAPLED* CANTIPLAPLAPPAPPED) AT SYSTER.THREADING._IOCOMPLETIONCALLCALLBACK.PERFORIOCOMPLOTIONCALLCALBACK (UINT32 ERROUSCODE, UINT32 NUMBYTES. Версия = 4.0.0.0, культура = нейтральная, publickeytoken = b77a5c561934e089 Справочник объекта не установлен на экземпляр объекта.at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext) at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext) at System.Web.AspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state) at System.Web.AspNetSynchronizationContext.CallCallback( Sendorpostcallback обратный вызов, состояние объекта) на system.servicemodel.dispatcher.imtabledispatchruntime.processmessage4 (Messagerpc & RPC) System.NullReferenceException:В экземпляре объекта не задана ссылка на объект.at System.web.httpapplication.ThreadContext.Enter (boolean setImpersonationContext) на system.web.httpapplication.onthreadenterprivate (boolean setImpersonationContext) at system.web.aspnetsynchronizationcontext.callcallckelblenundernultultultullyNdultyNultsultAlmallyNulting. Allback ( Sendorpostcallback обратный вызов, состояние объекта) на system.servicemodel.dispatcher.imtabledispatchruntime.processmessage4 (Messagerpc & RPC)

Другие советы

Не уверен, что вы подразумеваете под «зависаниями», это просто то, что он не обновляется или что он не отвечает.

Возможно, что ответ на страницу ASP отправляется в браузер до того, как ответ вернется на веб-сервер из службы WCF. В этом случае страница ASP не будет обновляться, когда результат вернется с сервиса.

У вас есть 2 варианта:

  • Используйте JavaScript для опроса сервера для изменений.
  • Блокируйте возврат страницы загрузки, чтобы ответить получено от службы.

Если вы вступаете в ожидание ожидания перезаписания, то было бы проще просто сделать стиль ответа на запрос.

Еще одна распространенная проблема состоит в том, что прокси WCF на клиенте закрывается до получения обратного вызова. Трассировка покажет, что он возвращается, но никто не слушает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top