2013-08-27 34 views
1

我目前正在试图解决我不能为我的生活工作的任何线索事业WCF服务错误...奇怪的间歇WCF错误铸造IPermissions

问题本质上是它会得到一个InvalidCastException尝试将事件转换为IPrincipal对象(我在错误中看到的XmlDictionaryString & ClassDataContractCriticalHelper)。服务器端它甚至没有打我们的代码,问题是我们只是间歇性地得到这个问题(每周2-3次,每次使用API​​多次),并给出了流量的大小如果我们留下完整的信息日志记录,我们将在几分钟内完成生产服务器硬盘驱动器的服务。

堆栈跟踪为:

System.InvalidCastException: Unable to cast object of type 'System.Xml.XmlDictionaryString' to type 'System.Security.IPermission'.  
Server stack trace:  at WriteOUROBJECTNAMEToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract)  
at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)  
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)  
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)  
at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph)  
at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph)  
at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph)  
at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph)  
at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart(XmlDictionaryWriter writer, PartInfo part, Object graph)  
at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter(XmlDictionaryWriter writer, PartInfo part, Object graph)  
at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameters(XmlDictionaryWriter writer, PartInfo[] parts, Object[] parameters)  
at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeBody(XmlDictionaryWriter writer, MessageVersion version, String action, MessageDescription messageDescription, Object returnValue, Object[] parameters, Boolean isRequest)  
at System.ServiceModel.Dispatcher.OperationFormatter.SerializeBodyContents(XmlDictionaryWriter writer, MessageVersion version, Object[] parameters, Object returnValue, Boolean isRequest)  
at System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)  
at System.ServiceModel.Channels.BodyWriter.WriteBodyContents(XmlDictionaryWriter writer)  at System.ServiceModel.Channels.BodyWriterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)  
at System.ServiceModel.Channels.Message.WriteBodyContents(XmlDictionaryWriter writer)  
at System.ServiceModel.Security.SecurityAppliedMessage.WriteBodyToSignThenEncryptWithFragments(Stream stream, Boolean includeComments, String[] inclusivePrefixes, EncryptedData encryptedData, SymmetricAlgorithm algorithm, XmlDictionaryWriter writer)  
at System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.ApplyBodySecurity(XmlDictionaryWriter writer, IPrefixGenerator prefixGenerator)  
at System.ServiceModel.Security.SecurityAppliedMessage.OnWriteMessage(XmlDictionaryWriter writer)  at System.ServiceModel.Channels.Message.WriteMessage(XmlDictionaryWriter writer)  
at System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota)  
at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)  
at System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage(Message message)  at System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)  
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)  
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)  
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)  
at System.ServiceModel.Channels.TransactionRequestChannelGeneric`1.Request(Message message, TimeSpan timeout)  
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)  
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)  
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)  
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)  
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 
Exception rethrown at [0]:  
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)  
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)  
at OUR.CLIENT.ANONYMIZED.AddThing(ThingInfo data) 
at OUR.CLIENT.ANONYMIZED.DoStuff() 

本来我们已经启用了邮件的安全性,给出的暗示的IPrincipal我们换到TransportWithMessageCredential和HTTPS加密只是为了看看它的工作,但它让我们无处。配置是:

<serviceHostingEnvironment> 
    <baseAddressPrefixFilters> 
    <add prefix="http://www.anonymized.com"/> 
    </baseAddressPrefixFilters> 
</serviceHostingEnvironment> 
<bindings> 
    <basicHttpBinding> 
    <binding name="httpBindingConfig"> 
     <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="httpBindingBehaviour" name="Anonymized.Service.Implementation"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="httpBindingConfig" name="httpBindingEndpoint" 
       contract="Anonymized.Service.Contract" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost/Anonymized" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="httpBindingBehaviour"> 
     <serviceThrottling maxConcurrentCalls="160" maxConcurrentSessions="100" maxConcurrentInstances="100" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AnonymizedSqlMembershipProvider" /> 
     </serviceCredentials> 
     <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider"> 
     </serviceAuthorization> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

有没有人有任何理论,甚至暗示在哪里看?

+0

你是否能够显示代码ifrom WriteOUROBJECTNAMEToXml方法 –

+0

这是.NET框架中的自动生成方法 - 它不是我们的代码。我没有任何代码。 – fyjham

回答

0

这是那种问题DebugDiag是完美的。您可以配置崩溃规则以仅在发生此异常时记录故障转储。 DebugDiag附带的崩溃分析脚本可能会告诉您足够的信息,因此您可以解决您的问题。否则,您可能需要手动调试才能找到根本原因。

+0

有趣的是,我可能会看看...大多数诊断工具都需要一个全功能的应用程序崩溃,虽然正确吗? WCF处理这个失败的“优雅”,因为它只是向客户端返回一个错误,而不是关闭整个应用程序池 - 我们甚至没有在服务器的事件日志或任何东西中发生错误,WCF只是把它当作一个不好的要求并将其扔掉。 – fyjham

+0

不完全。你会配置你的规则来捕捉第一次机会的例外。当调试器连接到进程时,即使在调用堆栈中进一步处理它们,您也可以看到(响应)这些第一次机会异常。 –