My wiki started returning incomplete search results.
A user will search for a term that they know is part of an article and the article isn't returned in the results.
They can browse to the article and see that the page does contain the search term.
This has happened frequently, so I've been trying to find a solution. I haven't been able to find anyone having this problem. The search index currently thinks there are 300 pages in the wiki, though there are actually 1193.
I followed the directions on the Screwturn site for rebuilding the index, including adjusting the timeout in the web.config. I ended up with several attempted rebuilds and around 70 errors between the attempts. I saw timeout errors and primary key violations. The rebuild wouldn't stay running very long, usually less than 10 minutes.
Has anyone had any success with rebuilding the index?
Has anyone seen the same sort of errors and been able to resolve them?
Does anyone know what I can expect to see when the rebuild is complete?
I was thinking that I would see a new search index that referenced the 1193 pages, instead of 300. Is that correct?
Any help would be appreciated.
Below are three examples of the error messages I was seeing.
System.Data.SqlClient.SqlException: Violation of UNIQUE KEY constraint 'UQ_IndexDocument'. Cannot insert duplicate key in object 'dbo.IndexDocument'. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_IndexDocument'. Cannot insert duplicate key in object 'dbo.IndexDocument'. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
(Update 7/30)
I tried deleting the IndexDocument records and ran the rebuild again, but ended up with the same results. The index did not increase in size. I viewed the records on the IndexDocument table and they stop in the M articles of one of the namespaces. This explains why searches fail against words starting after M. Also, only two of the namespaces are being indexed. I watched the admin home page while the index was being rebuilt and waited for the wheels to stop spinning. Nothing seemed to change. I checked the system log and didn't see any errors. As soon as I restarted the application from the admin home page, the timeout error appeared in the log again. This leaves me with more questions than answers.
What is the indicator that the index has been successfully rebuilt, or that the index has stopped rebuilding? I thought this was the spinning wheels that run after the rebuild link has been clicked.
I've researched the timeout error and everything points to a timeout value that's too short and the forum posts say to update the timeout value in the .NET code, or adjust the query wait property on the server. Has anyone had success with this and what did you do?
Does anyone know what script is being run by the wiki to rebuild the index? Is it possible to run it manually from the SQL server?
Update: I had to give up on finding my answers. I did learn that you can force the index to rebuild one article at a time simply by updating the particles that are not listed in the IndexDocument table. While this does work, it results in some unexpected behavior when viewing the AllPages page from whichever namespace you're in. The AllPages page normally lists all articles (and the letter for each section) alphabetically. Once I did this forced update, the AllPages page would display the pages in alphabetical order, but the order of the sections would be similar to "#, A, B". The next batch of pages would be "B, C, K" and so on. Hardly ideal, but the search does work again. Just FYI for anyone else having probles, there is a workaround. This will have to be my final solution as the wiki is going to be retired and moved to a more robust (and supported!) knowledge base. Thanks Dreamwalker and Doug.
Check for a page with no page content and delete these pages - that fixed my index.
G SYSTEM Page OnTime-Tools created
G wkrzystek Page update requested for OnTime-Tools
E SQL Server Pages Storage Provider+SYSTEM System.Data.SqlClient.SqlException: Transaction (Process ID 173) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
E SQL Server Pages Storage Provider+SYSTEM Page indexing error for OnTime-Tools (skipping page): System.NullReferenceException: Object reference not set to an instance of an object.
E SYSTEM http://websrv01/matrixwiki/Edit.aspx
System.Web thrown System.Web.HttpUnhandledException
E SYSTEM PageContent could not be retrieved for page OnTime-Tools - returning empty
We had the same problem - we only had 510 of 670 pages in our index and the content stopped after "O". I couldn't find any other solutions so I started going through the SQL Log table. I noticed that a page was added but there was a SQL deadlock trying to store the page content. After that set of errors, every time a page was modified and the index was trying to update, it generated a "PageContent could not be retrieved" message and the index stopped there.
I was just trying to fight this same issue and checked here to see if anyone else had a solution. Here are the results of my investigations.
I performed an index rebuild and then restarted the application but it still only says that 20 of my 123 total pages are indexed. I remember this being 20 the last time I checked as well so it seems like it is stuck. I don't see any errors in the system log. The version of this installation is 3.0.5.600 (the newest).
I have a few ScrewTurn installations so I just checked another installation that seems to search correctly and see that all 190 pages are indexed! The version of this installation is 3.0.2.500.
I wonder if indexing pages is broken in the newest version. Can you share what version you are running? Maybe a check of the changes between these two versions will highlight the problem.
Related
I am hoping that someone can give a little insight and/or instance.
I am experiencing an error trying to create an instance of an Excel or Word application. The application I am working on is using interop assemblies to manipulate Excel and Word. In both cases, I have been successful in doing so in the past, the problems/errors began only recently. I've noticed multiple posts about similar error messages and have looked through them, but none addressed a similar issue or provided relevant insights.
In attempting to create an instance of Excel, the resulting error is similar to the following:
{System.Runtime.InteropServices.COMException (0x80080005): Retrieving
the COM class factory for component with CLSID
{00024500-0000-0000-C000-000000000046} failed due to the following
error: 80080005 Server execution failed (Exception from HRESULT:
0x80080005 (CO_E_SERVER_EXEC_FAILURE)). at
System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType
objectType) at
System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType
serverType) at
System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType
serverType, Object[] props, Boolean bNewObj) at
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean
publicOnly, Boolean noCheck, Boolean& canBeCached,
RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean
skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,
Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic) at
System.Activator.CreateInstance(Type type)
I am encountering a similar error when trying to create an instance of Word. Again, my code has been doing this with no problem, until recently.
I'm thinking this may have started with possibly with recent upgrades to the Office instance on my development machine.
The references for both Interop assemblies (Microsoft.Office.Interop.Excel and Microsoft.Office.Interop.Word) associated with my project have Embed Interop Types set to TRUE)
If I am interpreting the error text correctly, the code is looking for the typelib/class id (i.e., {00024500-0000-0000-C000-000000000046}) to be in the current machine's registry and cannot find it. I did search the \HKEY_CLASSES_ROOT\TypeLib folder in the registry and did not see it. My question would be, why is it looking for that particular id? Of course, I may be completely out in left field on this line of reasoning.
Since I am seeing similar effects in both contexts, I have to believe that the issue's cause here is on the Office level, rather than either application. To the best of my knowledge, no change was made to the code or the Interop assembly references in the project.
Any insights and/or suggestions would, of course, be greatly appreciated.
I am using VS 2017 (64-bit) on Windows 10.
I am using Orchard 1.8 and I installed the "Vandelay Industries - Version: 1.8" module from the Gallery onto my development box (running an VS Orchard project) and enabled just the "Vandelay Meta" (it's all I need at the moment). I added the "Meta" part to the "Page" content type and all that worked fine. I as able to add both a "Description" and "Keywords" to pages.
When I did the module installation to my production server (our server) which is the same version of Orchard (it was set up from the dev copy a month or so ago), I am getting a message "Some features need to be upgraded: Vandelay.Industries" at the top of the Admin "Modules" - "Features" screen and there is a red box around the "Vandelay Meta" feature and there is also a "Upgrade" link next to the feature's "Disable" link. If I click it the page just refreshes and nothing changes.
The part is also not available for adding to the page content type.
The is also an error in the Orchard Log
2014-10-08 14:10:58,385 [13] Orchard.Exceptions.DefaultExceptionPolicy - Default - An unexpected exception was caught
...servername/Packaging/PackagingServices/InstallPackageDetails?packageId=Orchard.Module.Vandelay.Industries&version=1.8&sourceId=1&redirectUrl=%2FPackaging%2FGallery%2FModules
Orchard.OrchardCoreException: Unable to make room for file "C:\inetpub\A1_Website-OrchardCMS\App_Data\RecipeQueue\38a6aedb4c514ea1866be2138d14c99e\0" in "App_Data" folder ---> System.UnauthorizedAccessException: Access to the path 'C:\inetpub\A1_Website-OrchardCMS\App_Data\RecipeQueue\38a6aedb4c514ea1866be2138d14c99e\0' is denied.
The App_Data and it's child folders has Read Execute Write permission IIS 7 IIS_IUSRS account.
There are also some errors "CREATE TABLE permission denied in database " i.e.
2014-10-08 14:12:19,332 [7] Orchard.Data.Migration.DataMigrationManager - Default - Error while running migration version 0 for Vandelay.Industries
../Admin/Modules/Features
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: CREATE TABLE permission denied in database 'Orchard_ProductionDB'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Orchard.Data.Migration.Interpreters.DefaultDataMigrationInterpreter.RunPendingStatements()
at Orchard.Data.Migration.Interpreters.DefaultDataMigrationInterpreter.Visit(CreateTableCommand command)
at Orchard.Data.Migration.Interpreters.AbstractDataMigrationInterpreter.Visit(ISchemaBuilderCommand command)
at Orchard.Data.Migration.Schema.SchemaBuilder.CreateTable(String name, Action1 table)
at Vandelay.Industries.MetaMigrations.Create()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Orchard.Data.Migration.DataMigrationManager.Update(String feature)
And the "Vandelay_Industries_MetaRecord" "Vandelay_Industries_SettingsRecord" are not in the production database (they are in the dev DB)
I have tried reinstalling the module and it does not fix it.
Any way to fix this? If so how?
Thanks in advance,
K.E.
Ensure the migration module is enabled before installing Vandelay_Industries_*, I found that to a be a cause as well.
Trying to for a Classic ASP webapp on IIS 7.5 to run in STA mode by enabling AspCompat. This is a hard requirement due to a COM Object being instantiated that is not thread safe.
<%# Page Language="VBScript" AspCompat="true" Debug="false" %>
Although the settings is forced through AspCompat, the behaviour when rendering websites seems not to be consequent.
The expected behaviour:
On every page request, the ComServer.exe starts, does some work and closes.
When another request arrives, processing waits for the first request to finish.
I know this is bad performance whise. However sadly, this is a hard requirement for running the legacy ComServer.
This behaviour is visible when there are multiple parallel requests comming from the same client. When multiple requests come from different clients however, the behaviour changes:
After every batch of requests, the ComServer is closed.
If there is only one request, the ComServer is stopped after the request
If there are multiple requests, they are all processed under the same ComServer
Action 3 causes the ComServer to sometimes fail, causing COMExceptions.
Although the issue is probably caused by bad design of the COMObject, I cannot change this. The only thing I can do is surrounding COMObject access with an Application Lock
Dim oComSvr as object
oComSvr=Server.CreateObject("com_svr.my_svr")
...
Application.Lock
returnValue=oComSvr.selectform(value1, value2, ...)
Application.Unlock
However this prevents most COMExceptions, there are still specific timings that result in a COMException.
What can I do to force constant STA behaviour, also if multiple requests to the same IIS server come from different clients.
Tried to follow this article and implemented Page_Load to prevent the object being created before STA mode. http://technet.microsoft.com/en-ca/zwk9h2kb(v=vs.95).aspx
It still looks like if AspCompat is being ignored.
[COMException (0x800706be): Creating an instance of the COM component with CLSID {B28A581A-6CE3-46E9-871F-B2E129F7D238} from the IClassFactory failed due to the following error: 800706be.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
System.Activator.CreateInstance(Type type) +6
System.Web.HttpServerUtility.CreateObject(String progID) +122
ASP.myapp.Page_Load() +1670
System.Web.Util.CalliHelper.ArglessFunctionCaller(IntPtr fp, Object o) +8
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +8760147
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Update:
Read here and here that it is important WHERE the STA object is instantiated. Instantiating the object during construction time will cause this issue.
http://technet.microsoft.com/en-ca/zwk9h2kb(v=vs.95).aspx
http://msdn.microsoft.com/en-us/library/5dws599a(vs.71).aspx
Tried instantiating in Page_Load as in the example. However this does not change the behaviour when accessing the page from another client.
OK we've had this and this is how I've found a solution.. In our case I think it was linked to parent paths but could have been session state too...
Browse to C:\Documents and Settings\$your user name$\My Documents\IIS 7.5\config
Open applicationHost.config
Find the section
Change the section to the following… By default it only had the cache and empty limits bits but feel free to adjust any parameters you don't want.
<asp
enableParentPaths="true"
bufferingOn="true"
errorsToNTLog="true"
appAllowDebugging="true"
appAllowClientDebug="true"
scriptErrorSentToBrowser="true">
<session allowSessionState="true" />
<cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
<limits />
</asp>
Save and restart iis 7.5.
if it is surrounding COMObject access with an Application Lock
However, if you write something like this in a sample format to get an idea.
Application["Counter"] = (int) Application["Counter"] + 1;
then you will need to use Lock and Unlock as follows:
Application.Lock();
Application["Counter"] = (int) Application["Counter"] + 1;
Application.Unlock();
This is because the thread might be interrupted between the read from, and then write to, the Application object, and another thread could therefore alter the value stored for the "Counter".
I have set up a new Orchard CMS site using the Blog recipy and a database running on SQL Server.
I have enabled all modules the that site shipped with including the comments module.
Comments is showing up in the list of content parts. It is also showing up in the list of parts for a Blog Post content type.
The problem is that no Allow new comments section when creatring a new post. No comments section is displayed when viewing a published post either.
Is there something really obvious that I am missing?
Update:
There is a single error message in the App_Data\Logs directory, but I am not sure it is related:
2012-05-18 13:38:37,019 [8] NHibernate.AdoNet.AbstractBatcher - Could not execute query: SELECT top 2 this_.Id as Id11_0_, this_.SerialNumber as SerialNu2_11_0_ FROM Settings_ShellDescriptorRecord this_ WHERE 1=1
System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Settings_ShellDescriptorRecord'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
2012-05-18 13:38:37,078 [8] NHibernate.Util.ADOExceptionReporter - Invalid object name 'Settings_ShellDescriptorRecord'.
2012-05-18 13:38:37,091 [8] NHibernate.Util.ADOExceptionReporter - Invalid object name 'Settings_ShellDescriptorRecord'.
Update 2:
Ok, after some time I am back to this issue. Originally I was using SQL Server 2008R2, but to rule that out I set up a couple of test sites using a local DB with each. I downloaded fresh copies of Orchard.Web.1.4.1 and Orchard.Web.1.4.2 and set them up using the Blog recipe. the 1.4.1 system still had the issue. 1.4.2 though has everything where it should be. There is a comments option in the admin menu and blog posts have comments on them.
Not sure what the issue with 1.4.1 is, but 1.4.2 is working for me ok.
We are having an issue with a command line (batch) application and full/partial trust.
Our previous release (version number 7.13.0.63) works fine, however, when we install the new version (7.13.0.249) we get a “That assembly does not allow partially trusted callers.”
Exception:
Stack Trace (edited):
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance[T]()
at <Company>.Service.<Product>.Proxy.Factories.ControllerProxyFactory.Create[T]()
<Stack Trace that leads to creation of a WCF client> ...
Inner Exception:
An error occurred creating the configuration section handler for system.serviceModel/behaviors: That assembly does not allow partially trusted callers. (C:\Program Files (x86)\InsuranceLine\ListLoader\InsuranceLine.ListLoader.Launcher.exe.Config line 53)
Stack Trace:
at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecordsectionRecord, Object parentResult)
at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at System.ServiceModel.Activation.AspNetEnvironment.UnsafeGetSectionFromConfigurationManager(String sectionPath)
at System.ServiceModel.Activation.AspNetEnvironment.UnsafeGetConfigurationSection(String sectionPath)
at System.ServiceModel.Configuration.ConfigurationHelpers.UnsafeGetAssociatedSection(ContextInformation evalContext, String sectionPath)
at System.ServiceModel.Description.ConfigLoader.LookupChannel(ContextInformation configurationContext, String configurationName, ContractDescription contract, EndpointAddress address, Boolean wildcard, Boolean useChannelElementKind, ServiceEndpoint& serviceEndpoint)
at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
<Stack Trace that determines the correct WCF factory to create>
Inner Exception:
That assembly does not allow partially trusted callers.
Stack Trace:
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(RuntimeAssembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.ServiceModel.Configuration.ServiceModelExtensionCollectionElement`1.CreateNewSection(String name)
at System.ServiceModel.Configuration.ServiceModelExtensionCollectionElement`1.DeserializeElementCore(XmlReader reader)
at System.ServiceModel.Configuration.ServiceModelExtensionCollectionElement`1.DeserializeElement(XmlReader reader, Boolean serializeCollectionKey)
at System.Configuration.ConfigurationElementCollection.OnDeserializeUnrecognizedElement(String elementName, XmlReader reader)
at System.Configuration.ConfigurationElement.DeserializeElement(XmlReader reader, Boolean serializeCollectionKey)
at System.Configuration.ConfigurationElement.DeserializeElement(XmlReader reader, Boolean serializeCollectionKey)
at System.Configuration.ConfigurationSection.DeserializeSection(XmlReader reader)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionImpl(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.RuntimeConfigurationRecord.CreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.BaseConfigurationRecord.CallCreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader, String filename, Int32 line)
In regards to the process that we use to deploy our product, we use a MSI created through WiX. We perform the following steps:
Uninstall the previous version of the product
Copy the msi from a network share (same share for both versions, different subdirectory based on versions)
Install the msi as an administrator
This installs to C:\Program Files (x86)
The only changes between the 2 versions are:
The inclusion of an extra AppSettings item in the app.config file (myapp.exe.config) to specify a transaction timeout
Changing a “using new TransactionScope()” to “using New TransactionScope(TransactionScopeOption.Required, timeoutValueReadFromAppSettingsAndStoredInLocalVariable)”
The creation of the WCF client is outside of this Transaction Scope.
Additional Information:
The exception does not occur in any of our dev/staging/qa/pre production environments. It only happens on our production application server.
We are in the process of rolling out Windows 7 to our organisation, so it is possible that enterprise policy has changed.
The application targets the .Net Framework 4.0
If we uninstall the new version, and reinstall the old version (including the copy from network share) the old version works fine still
The machine being installed to is Windows Server 2008 R2
The machine is a Virtual Machine that is hosted in a VMWare environment
Ideally I’d like to know a few things:
How to alter the assembly (or set permissions after install) so that it can run in a full trust mode
How to replicate the issue in dev/staging/QA environments
Explicitly "untrusting" the assembly might reproduce it, but I want to reproduce it in the same way as production so that when it is installed it is identified as untrusted, it seems to me that the way to do this would have something to do with “untrusting” the network share I copy the MSI from, or possibly “untrusting” the publisher information in the MSI/assembly.
How to configure the production application server/security policy so that future installs are fully trusted (Answering item 2 will most likely answer this)
Thanks
This is really quite odd given that the .NET 4.0 CLR does not apply CAS security policy by default, so you would actually have to make a some sort of (hopefully) deliberate change to get a locally installed command line application to be partially trusted.
Before trying to dig too deep for potential causes, could you please verify the following:
Does your app.config file contain a NetFx40_LegacySecurityPolicy element?
Is your application actually running under the 4.0 CLR on the problem machine? (If you can't modify the source to output the value of Environment.Version before the exception is thrown, Process Explorer should allow you to determine which CLR version(s) are running in your process.)