Служба WCF в приложении ASP.NET, генерирующая периодические ошибки 404 - PullRequest
1 голос
/ 05 августа 2010

Эта проблема победила мои попытки в Google, так что здесь идет.У нас возникла проблема с получением данных из службы WCF (просто поиск данных, поэтому мы включили их для запросов HTTP GET).Время от времени он будет возвращать 404. В трассировке стека NOT , кажется, есть WCF в миксе - StaticFileHandler, кажется, пытается его обслужить.

Я создал пример службы WCF в ASP.NET 3.5 с пакетом обновления 1 (SP1) и могу воспроизвести проблему.Это мой пример сервиса - единственными отличиями от стандартного WCF на данный момент являются AspNetCompatibilityRequirements и включение WebScript и HTTP GET:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{        
    public string DoWork(string param1)
    {
        System.Threading.Thread.Sleep(150);
        return "bar";
    }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet]
    string DoWork(string param1);
}

Конфигурация сервиса:

  <service name="namespace.Service1">
    <endpoint 
         behaviorConfiguration="WebScriptEnabled" 
         address="http://localhost:2961/svc/Service1.svc" 
         binding="webHttpBinding" 
         contract="namespace.IService1">
    </endpoint>
  </service>

Конфигурация поведения:

  <behaviors>
    <endpointBehaviors>
      <behavior name="WebScriptEnabled">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
  </behaviors>

Мой узел имеет aspNetCompatibilityEnabled = "true">, но в остальном все в значительной степени OOB.У меня вообще нет настроек для webHttpBinding.

Если я F5 на VS 2008 использую встроенный веб-сервер и нажму URL, самый первый запрос приведет к 404. Если я продолжу нажимать на него даже снебольшая нагрузка (7-10 одновременных запросов), я получу несколько ошибок 404.

Если я тогда позволю нагрузке упасть до нуля и перезапущу свой тест, я могу легко перейти к 50 одновременным запросам БЕЗ любых ошибок.

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

Надеюсь, я что-то не так делаю и не обнаружил ошибку фреймворка.Моя производственная среда - IIS6, и, похоже, она работает так же, как и мой сервер разработки.

...