Подтвердить что ты не робот

Служба WCF умирает самостоятельно через некоторое время

У меня возникла особая проблема, связанная с размещенной службой WCF (.NET Framework 4, IIS 7, Windows Standard Standard SP2).

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

Приложение размещено в IIS7 с определенным пулом приложений, указывающим на версию .NET Framework 4. Я использовал FusionLog, чтобы найти больше на отсутствующей сборке, не повезло. Однако, если я удалю все сборки с размещенного сервера и скопирую его снова из папки сборки, он снова начнет работать без проблем. Я не могу объяснить это поведение и много раз искал/пытался найти ответ. Чтобы предоставить дополнительную информацию, служба является локальной сборкой, и я использую Enterprise Library для обработки исключений и ведения журнала. Служба WCF нас использует httpBinding. Сборка построена на основе отладки. Пожалуйста, помогите.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
    ------    
  <!-- Begin .......Exception Handling Configuration-->
  <!-- End .........Exception Handling configuration-->

  <!-- Start .............Logging Configuration-->
  <!--End............ Logging Configuration-->

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
        <identity impersonate="true" />
  </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <defaultDocument>
            <files>
                <add value="Service.svc" />
            </files>
        </defaultDocument>
    </system.webServer>

    <!-- Start WCF ................Settings-->
  <system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" />
      <endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" />
    </diagnostics>
    <!-- Begin..Included for Switching off Security-->
    <bindings>
      <basicHttpBinding>
        <binding name="httpBindingConfig" closeTimeout="24.01:00:00" openTimeout="24.01:00:00" receiveTimeout="24.10:00:00" sendTimeout="24.01:00:00" />
      </basicHttpBinding>
    </bindings>
    <!-- End ..Included for Switching off Security-->
    <services>
      <service name="Service">
        <endpoint binding="mexTcpBinding" bindingConfiguration="" name="EndPointMex" contract="ICommunicatorService" />
        <endpoint address="http://<>/Service.svc" binding="basicHttpBinding" bindingConfiguration="" name="EndPointHttp" contract="Reflections.IService" />
        <host>
          <timeouts closeTimeout="24.00:10:00" openTimeout="24.01:00:00" />
        </host>
      </service>
    </services>
    <behaviors>
    <serviceBehaviors>
      <behavior>
        <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
        <serviceMetadata httpGetEnabled="true" />
        <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <!-- End WCF ................Settings-->  
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
 </configuration>

Журнал событий ----------------------

 Log Name:      Application
    Source:        System.ServiceModel 4.0.0.0
    Date:          7/5/2011 10:39:47 AM
    Event ID:      3
    Task Category: WebHost
    Level:         Error
    Keywords:      Classic
    User:          NETWORK SERVICE
    Computer:      <Masked for Security Reasons>
    Description:
    WebHost failed to process a request.
     Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/12036987
     Exception: System.ServiceModel.ServiceActivationException: The service '/Service.svc' cannot be activated due to an exception during compilation.  The exception message is: Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified.. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified.
       at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
       at System.Reflection.Assembly.Load(String assemblyString)
       at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
       --- End of inner exception stack trace ---
       at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
       at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath)
     Process Name: w3wp
     Process ID: 3480

Ошибка, отображаемая на странице ASP.NET -----------------

Server Error in '/' Application.
--------------------------------------------------------------------------------

Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Assembly Load Trace: The following information can be helpful to determine why the assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' could not be loaded.


Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e
 (Fully-specified)
LOG: Appbase = file://path/
LOG: Initial PrivatePath = \\path\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: \\path\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e
LOG: The same bind was seen before, and was failed with hr = 0x80070002.



Stack Trace: 


[FileNotFoundException: Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +39
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +132
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +144
   System.Reflection.Assembly.Load(String assemblyString) +28
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +210
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +1440
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +44
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +615

[ServiceActivationException: The service '/Service.svc' cannot be activated due to an exception during compilation.  The exception message is: Could not load file or assembly 'Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e' or one of its dependencies. The system cannot find the file specified..]
   System.Runtime.AsyncResult.End(IAsyncResult result) +687598
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +190
   System.ServiceModel.Activation.ServiceHttpModule.EndProcessRequest(IAsyncResult ar) +301390
   System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +8898292
-------------------------------------------------------------------------------

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1 

Ошибка в журнале сварки

*** Assembly Binder Log Entry  (7/22/2011 @ 10:34:51 AM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e
 (Fully-specified)
LOG: Appbase = file://path/
LOG: Initial PrivatePath = \\path\bin
LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b44c783a
LOG: Cache Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b44c783a
LOG: AppName = 34485861
Calling assembly : (Unknown).
===
LOG: Start binding of native image Reflections.Service, Version=1.0.0.0, Culture=en-US, PublicKeyToken=fb2997440781f12e.
WRN: No matching native image found.

Существует аналогичная проблема, обсуждаемая здесь, но не в состоянии найти anwer Изменение web.config отключает службу WCF?

4b9b3361

Ответ 1

Возможно ли, что файл не найден, является красной селедкой, и вы просто испытываете неактивность? Я помню, когда я писал свой первый сервис WCF, я не понимал, что настройки тайм-аута дефолтны на что-то довольно короткое, как на пару минут. Я думаю, вы можете установить их очень долго (например, 24 дня).

В моей конфигурации приложения в разделе <configuration> сразу после моего раздела < system.web > у меня есть:

    <system.serviceModel>
    <bindings>
        <netTcpBinding>
            <binding name="tcp_unsecured" receiveTimeout="infinite" sendTimeout="00:00:30">
                <security mode="None">
                </security>
            </binding>
        </netTcpBinding>
    </bindings>

За этим следуют разделы службы и поведения. Здесь png диалогового окна, когда я нажимаю правой кнопкой мыши и выбираю Изменить конфигурацию WCF на моем app.config. Я набрал "бесконечный" в файле app.config xml, но диалог превращает это в соответствующее большое значение. enter image description here

Обновление. В моем классе посредника здесь находится конструктор, который устанавливает NetTcpBinding. Я включаю это, потому что, похоже, мне нужно установить таймауты в коде.

    public DspServiceMediator( String serviceAddress)
    {
        EndpointAddress end_point = new EndpointAddress(serviceAddress);
        NetTcpBinding new_tcp = new NetTcpBinding(SecurityMode.None)
                                {ReceiveTimeout = TimeSpan.MaxValue,
                                 SendTimeout = new TimeSpan(0, 0, 30)
                                };

        _dspClient = new DspServiceClient(new_tcp, end_point);
    }