регистрация ошибок ELMAH, не работающим в службе WCF, размещенной в IIS с basicHttpBinding - PullRequest
1 голос
/ 17 декабря 2010

Я выполнил шаги, упомянутые в этой статье http://dotnetslackers.com/articles/aspnet/Getting-ELMAH-to-work-with-WCF-services.aspx, чтобы настроить службу WCF для настройки регистрации ошибок ELMAH. он работает с wsHttpBinding с веб-сервером Visual Studio, но когда я размещаю его в IIS (5/6) и меняю привязку на basicHttpBinding, он не регистрирует ошибки. Я попытался изменить код сигнализации об ошибке на «Elmah.ErrorLog.GetDefault(null).Log(new Error(ex));», как упоминалось по этой ссылке ELMAH - регистрация исключений без HttpContext , но это тоже не помогло. не уверен, что еще мне нужно сделать. Пожалуйста помоги. Вот конфигурация для службы WCF (я также пытался комментировать и раскомментировать совместимость с aspnet, но не сработал). если есть рабочий образец с basicHttpBinding, это было бы очень полезно. заранее спасибо.

  <system.serviceModel>
    <!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />-->
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpEndpointBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ElmahWCF.Service1Behavior" name="ElmahWCF.Service1">
        <endpoint address="" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpEndpointBinding"
          name="BasicHttpEndpoint" contract="ElmahWCF.IService1">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ElmahWCF.Service1Behavior">
           <!--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="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

1 Ответ

2 голосов
/ 17 декабря 2010

Я понял, что он отправляет почту, но не регистрирует ошибки в базе данных.это может быть проблема с правами доступа к базе данных (даже если у меня есть полный доступ к базе данных для моего идентификатора входа в Windows, и он нормально регистрируется, когда размещается на веб-сервере visual studio и используется wsHttpBinding).Я развернул его на сервере и настроил с другой учетной записью в пуле приложений, после чего он успешно регистрирует ошибки в базе данных, не внося никаких изменений в код из статьи.Я до сих пор не уверен, почему он не регистрирует ошибки в базе данных из локального IIS (я даже пытался установить для олицетворения значение true в web.config, чтобы он использовал мой идентификатор при ведении журнала), но это не большая проблема для меня, так какпосле развертывания работает нормально.спасибо.

...