Ich habe einen benutzerdefinierten Aspekt Ich versuche, zu meinem Dienst hinzufügen, um alle Fehler automatisch zu protokollieren und eine entsprechende Fehlermeldung senden, aber wenn ich versuche, es auf die Klasse anzuwenden und zu setzen Attributetargetelement zu Multicast.method oder es an die einzelnen Verfahren anwenden, gibt meinen Dienst einen 500-Fehler mit FehlermeldungPostsharp Methodboundry Aspekt funktioniert nicht mit WCF Service-Klasse
HTTP/1.1 500 Internal Server Error
Content-Length: 5829
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
jsonerror: true
WWW-Authenticate: oRswGaADCgEAoxIEEAEAAACpU1QBCKB37wAAAAA=
Date: Tue, 29 Mar 2016 10:03:03 GMT
{ "ExceptionDetail": { "Help": null, "Innerexception": { "Help ": null," InnerException ": {" HelpLink ": null," InnerException ": {" HelpLink ": null," InnerException ": null," Nachricht ":" Objekt kann nicht in einem Array dieses Typs gespeichert werden. " "StackTrace": "bei System.Array.InternalSetVal Ue (Void * target, Objektwert) \ u000d \ u000a at System.Array.SetValue (Objektwert, Int32 [] -Indizes) \ u000d \ u000a at System.Runtime.Serialization.ObjectManager.CompleteObject (ObjectHolder holder, Boolean bObjectFullyComplete) \ u000d \ u000a bei System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups (ObjectHolder-Inhaber) \ u000d \ u000a bei System.Runtime.Serialization.ObjectManager.RegisterObject (object obj, Int64-Objekt-ID, SerializationInfo-Info, Int64-idOfContainingObj, MemberInfo-Member, Int32 [] arrayIndex) \ u000d \ u000a bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject (Object Obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString) \ u000d \ u000a bei System.Runtime.Serialization.Formatters.Binary.ObjectReader. ParseObjectEnd (ParseRecord pr) \ u000d \ u000a bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse (ParseRecord pr) \ u000d \ u000a bei System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.Run() \ u000d \ u000a bei System.Runtime.Seri alization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler-Handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) \ u000d \ u000a bei System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream, HeaderHandler-Handler, Boolesch fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) \ u000d \ u000a bei PostSharp.Aspects.Serialization.BinaryAspectSerializer.Deserialize (Stream-Stream, IMetadataDispenser metadataDispenser) \ u000d \ u000a bei PostSharp.Aspects.Serialization.AspectSerializer.Deserialize (Assembly assembly, String resourceName , IMetadataDispenser metadataDispenser) \ u000d \ u000a bei PostSharp.ImplementationDetails_fd2023ff. <> z__a_2..cctor() in: Zeile 0 "," Type ":" System.InvalidCastException "}," Nachricht ":" Der Typinitialisierer für 'PostSharp.ImplementationDetails_fd2023ff. <> z__a_2 'hat eine Ausnahme ausgelöst. "," StackTrace ":" bei PostSharp.ImplementationDetails_fd2023ff. <> z__a_1..cctor() in: Zeile 0 "," Type ":" System.TypeInitializationException "}," Nachricht ":" Der Typinitialisierer für 'PostSharp.ImplementationDetails_fd2023ff. <> z__a_1 'hat eine Ausnahme ausgelöst. "," StackTrace ":" bei PostSharp.ImplementationDetails_fd2023ff. <> z__a_1.Initialize() \ u000d \ u000a bei AOS.BrokerAPI.WCFService.BrokerAPIService..cctor() in: Zeile 0 "," Type ":" System.TypeInitializationException "}," Nachricht ":" Der Typinitialisierer für 'AOS.BrokerAPI.WCFService.BrokerAPIService' hat eine Ausnahme ausgelöst. "," StackTrace ":" unter AOS.BrokerAPI.WCFService.BrokerAPIService..ctor() \ u000d \ u000a bei CreateAOS.BrokerAPI.WCFService.BrokerAPIService() \ u000d \ u000a bei System.ServiceModel.Dispatcher.InstanceProvider.GetInstance (InstanceContext instanceContext, Nachricht) \ u000d \ u000a at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance (InstanceContext instanceContext, Message-Anforderung) \ u000d \ u000a at System.ServiceModel.InstanceContext. GetServiceInstance (Nachricht Nachricht) \ u000d \ u000a bei System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel. Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) "," Type ":" System.TypeInitializationException "}," ExceptionType ":" System.TypeInitializationException "," Message ":" Der Typinitialisierer für 'AOS.BrokerAPI.WCFService.BrokerAPIService' hat eine Ausnahme ausgelöst. "," StackTrace ":" bei AOS.BrokerAPI. " WCFService.BrokerAPIService..ctor() \ u000d \ u000a bei CreateAOS.BrokerAPI.WCFService.BrokerAPIService() \ u000d \ u000a bei System.ServiceModel.Dispatcher.InstanceProvider.GetInstance (InstanceContext instanceContext, Nachricht) \ u000d \ u000a bei System. ServiceModel.Dispatcher.InstanceBehavior.GetInstance (InstanceContext instanceContext, Nachrichtenanforderung) \ u000d \ u000a at System.ServiceModel.InstanceContext.GetServiceInstance (Nachrichtennachricht) \ u000d \ u000a at System.ServiceMod el.Dispatcher.InstanceBehavior.EnsureServiceInstance (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage2 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessM essage1 (MessageRpc & rpc) \ u000d \ u000a bei System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) "}
Gibt es eine Weise, die ich dieses Problem umgehen kann?
My-Code ist wie folgt
Dienst Aspect
[Serializable]
public class ServiceAspect : OnMethodBoundaryAspect
{
//create logger
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(BrokerServiceAspect).Name);//
public override void OnException(MethodExecutionArgs args)
{
log.Error(args.Exception.Message, args.Exception);//log specific type of error
args.FlowBehavior = FlowBehavior.Return;//return excution
if (args.Exception is NullReferenceException)
{
args.ReturnValue = new FaultException(BrokerFaultCodes.NullExceptionCode);
}
else if (args.Exception is Exception)
{
args.ReturnValue = new FaultException(BrokerFaultCodes.GenericException);
}
}
}
Und es von der Klasse Anwendung
[ServiceAspect(AttributeTargetElements = MulticastTargets.Method)]
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, InstanceContextMode = InstanceContextMode.PerCall,IncludeExceptionDetailInFaults = true)]
public class APIService : ServiceBase,IAPIService
{
Sobald ich den Service-Aspekt aus meinem Code entferne, funktioniert es wie erwartet.
EDIT
[OnMethodBoundaryAspectConfiguration(SerializerType = typeof(MsilAspectSerializer))]
einstellen [Serializable-Attribut jetzt zu ersetzen kehrt
Ich habe darüber nachgedacht, aber das Problem ist, dass der Dienst nicht wegen des Attributs [Serializable] startet auf dem ServiceAspect. Ändern des serializable Attribut
[OnMethodBoundaryAspectConfiguration(SerializerType = typeof(MsilAspectSerializer))]
gibtMethod not found: 'Void API.Model.Infrastructure.Aspect.ServiceAspect.OnException(PostSharp.Aspects.MethodExecutionArgs
Danke, dass mein Problem gelöst wurde, hatte ich eine neue Version von Postsharp auf meinem Domain-Projekt ausgeführt, während ein früheres Projekt auf meiner Benutzeroberfläche ausgeführt wurde, so gab es einen Konflikt auf der DLL. – mahlatse