Симптомы (при попытке открытия сайта из SharePoint Designer):
По таким сообщениям об ошибке совершенно ничего не ясно, тем более, что сам портал прекрасно открывается через браузер и никаких ошибок не выдает.
Но если немножко поискать, в Windows Event Viewer можно обнаружить более подробное описание данной ошибки. Впрочем, тоже не слишком вразумительное:
Службе WebHost не удалось обработать запрос
Сведения об отправителе: System.ServiceModel.ServiceHostingEnvironment+HostingManager/32521977
Исключение: System.ServiceModel.ServiceActivationException: Не удается активировать запрошенную службу "/_vti_bin/client.svc" из-за исключения во время компиляции. Сообщение об исключении: Операция является недопустимой из-за текущего состояния объекта.. ---> System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта.
в Microsoft.SharePoint.ApplicationRuntime.SPLayoutsMappedFile.MapLayoutsVirtualPath(String virtualPath)
в Microsoft.SharePoint.ApplicationRuntime.SPVirtualPathProvider.GetCacheKey(String virtualPath)
в System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath(VirtualPath virtualPath, Boolean& keyFromVPP)
в System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
в System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
в System.Web.Compilation.BuildManager.GetCompiledCustomString(String virtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.GetCompiledCustomString(String normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
--- Конец трассировки внутреннего стека исключений ---
в System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
в System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath)
Имя процесса: w3wp
На системах с английской локалью сообщение выглядит следующим образом:
WebHost failed to process a request.
Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/17653682
Exception: System.ServiceModel.ServiceActivationException: The service '/_vti_bin/client.svc' cannot be activated due to an exception during compilation. The exception message is: Operation is not valid due to the current state of the object.. ---> System.InvalidOperationException: Operation is not valid due to the current state of the object.
at Microsoft.SharePoint.ApplicationRuntime.SPLayoutsMappedFile.MapLayoutsVirtualPath(String virtualPath)
at Microsoft.SharePoint.ApplicationRuntime.SPVirtualPathProvider.GetCacheKey(String virtualPath)
at Microsoft.SharePoint.Publishing.Internal.CmsVirtualPathProvider.GetCacheKey(String virtualPath)
at System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath(VirtualPath virtualPath, Boolean& keyFromVPP)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetCompiledCustomString(String virtualPath)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.GetCompiledCustomString(String normalizedVirtualPath)
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
Ниже описано решение данной проблемы.
Решение
Методом исключения постепенно выяснил, из-за чего происходит ошибка и как её решать.
Оказывается, ошибка происходит только в случае, когда определенная фича дважды активируется на сайте. Т.е., если развернуть наш wsp на сайт, и активировать все фичи - все работает отлично. Но если деактивировать и снова активировать определенную фичу (или даже откатить wsp целиком, а затем снова развернуть wsp и активировать эту фичу) - начинает возникать описанная выше ошибка; причем, она не пропадает, пока не пересоздашь веб-приложение.
Поскольку фича-виновница осуществляет модификации web.config через объектную модель SharePoint (SPWebConfigModification), стало очевидно, что причина запрятана где-то в web.config.
Оказалось, что при втором применении модификаций web.config, из этого файла, из секции <system.serviceModel>, пропадал элемент:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
После добавления этого элемента вручную, проблема исчезла.
Да здравствует Microsoft Magic!
P.S. Проблема возникает как минимум на SharePoint Foundation 2010, скорее всего также и на SPS2010. Установка декабрьских Cumulative Updates решить эту проблему не помогла.
Да с этими SPWebConfigModification вечно проблемы. Херовый способ придумали в Майкрософт для работы с веб-конфигом. Я думаю, проще и надёжней работать с конфигом, как с обычным xml через XElement или чё-нить подобное.
ОтветитьУдалитькак выяснилось, эта строчка лечит все обращения к вебсервисам шарепоинта. Столкнулся с аналогичной ошибкой, при удалении элементов списка (System.ServiceModel.ServiceActivationException).
ОтветитьУдалитьА где именно находится этот файл web.config. Вводил в поиске их там больше 60. В SP я новичок, не судите строго
ОтветитьУдалитьОлег, web.config нужно править соответствующий твоему веб-приложению. Например, если у тебя SharePoint-портал развернут на 80-м порту, тебе нужен файл C:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config
ОтветитьУдалитьСпасибо, попробовал) Но ошибка все-равно появляется( Может еще ка можно исправить???
ОтветитьУдалитьВозможно, у вас другая ошибка (посмотрите как следует Windows Event Viewer, там должен быть именно ServiceActivationException).
ОтветитьУдалитьТакже, возможно, неправильно добавляете в web.config. Сама секция <system.serviceModel> должна быть внизу файла.
По поводу web.config-там все есть и было. А по поводу событий пока ниче найти не могу(
ОтветитьУдалитьThanks for the help! You pointed me in the right direction when I encountered something similar.
ОтветитьУдалитьhttp://johnmcavinue.ie/Blog/Sharepoint_2010_Designer_An_error_occurred_while_trying_to_fetch_data_from_your_Sharepoint_site
Этот комментарий был удален автором.
ОтветитьУдалить