2016-03-29 42 views
1

Tüm hataları otomatik olarak günlüğe kaydetmek ve uygun bir hata iletisi göndermek için hizmetime eklemeye çalıştığım özel bir yönü var, ancak bunu sınıfta uygulamaya çalıştığımda ve ayarlanmış Multicast.method için Attributetargetelements veya bireysel yönteme uygulamak, benim Servis hata mesajıPostsharp Methodboundry yönü WCF Service sınıfı ile çalışmadı

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" ile 500 hatası döndürür: { "HelpLink": null, "InnerException": { "HelpLink ": null," InnerException ": {" HelpLink ": null," InnerException ": {" HelpLink ": null," InnerException ": null," Message ":" Nesne bu türde bir dizide saklanamaz. ", "StackTrace": "at System.Array.InternalSetVal System.Array.SetValue (Object value, Int32 [] dizinleri) \ u000d \ u000a 'da System.Runtime.Serialization.ObjectManager.CompleteObject öğesinde (ObjectHolder holder, Boolean bObjectFullyComplete) System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups (ObjectHolder holder) \ u000d \ u000a at u.tr/System.Runtime.Serialization.ObjectManager.RegisterObject (Object obj, Int64 objectID, SerializationInfo bilgisi, Int64 idOfContainingObj, MemberInfo üyesi, Int32 [] System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject (Object obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString) System.Runtime.Serialization.Formatters.Binary.ObjectReader öğesinde arrayIndex) \ u000d \ u000a \ u000d \ u000a. System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse (ParseRecord pr) \ u000d \ u000a at System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.Run() \ u000d \ 'da ParseObjectEnd (ParseRecord pr) \ u000d \ u000a System.Runtime.Seri şirketinde u000a System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream, HeaderHandler işleyicisi), alization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler işleyicisi, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) \ u000d \ u000a Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) PostSharp.Aspects.Serialization.BinaryAspectSerializer.Deserialize (Akış akımının en \ u000d \ u000a, IMetadataDispenser metadataDispenser) \ u000d \ u000a PostSharp.Aspects.Serialization.AspectSerializer.Deserialize (Montaj tertibatı, dize resourceName de , PostSharp.ImplementationDetails_fd2023ff adresindeki IMetadataDispenser metadataDispenser) \ u000d \ u000a. <> z__a_2..cctor() 'da: satır 0 "," Tür ":" System.InvalidCastException "}," İleti ":" PostSharp.ImplementationDetails_fd2023ff için tür başlatıcısı. <> z__a_2 'bir istisna attı. "," StackTrace ":" PostSharp.ImplementationDetails_fd2023ff. <> z__a_1..cctor() 'da: satır 0 "," Tür ":" System.TypeInitializationException "}," İleti ":" PostSharp.ImplementationDetails_fd2023ff için tür başlatıcısı. <> z__a_1, bir istisna attı. "," StackTrace ":" PostSharp.ImplementationDetails_fd2023ff. <> z__a_1.Initialize() \ u000d \ u000a AOS.BrokerAPI.WCFService.BrokerAPIService..cctor() 'da: line 0 "," Type ":" System.TypeInitializationException "}," Message ":" Tür başlatıcısı 'AOS.BrokerAPI.WCFService.BrokerAPIService' bir istisna attı. "," StackTrace ":" AOS.BrokerAPI.WCFService.BrokerAPIService..ctor() \ u000d \ u000a CreateAOS.BrokerAPI.WCFService.BrokerAPIService() \ u000d \ System.ServiceModel.Dispatcher.InstanceProvider.GetInstance (InstanceContext instanceContext, Message message) \ u000d \ u000a at System.ServiceModel.InstanceContext at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance (InstanceContext instanceContext, ileti isteği) \ u000d \ u000a. System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance (MessageRpc & rpc) \ u000d \ u000a at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc) adresindeki GetServiceInstance (Message message) \ u000d \ u000a 403.210 RPC) \ u000d \ u000a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & RPC) de \ u000d \ u000a System.ServiceModel de System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & RPC) \ u000d \ u000a de. System.ServiceModel.Dispatcher.ImmutableDispatchRuntime adresindeki System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & rpc) \ u000d \ u000a adresindeki Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & rpc) \ u000d \ u000a.SystemServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc) \ u000d \ u000a at System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) "," Type ":" ProcessMessage11 (MessageRpc & rpc) \ u000d \ u000a System.TypeInitializationException "}," ExceptionType ":" System.TypeInitializationException "," Message ":" AOS.BrokerAPI.WCFService.BrokerAPIService "için tür başlatıcı bir istisna attı.", "StackTrace": "AOS.BrokerAPI at. WCFService.BrokerAPIService..ctor() \ u000d \ u000a System at System.ServiceModel.Dispatcher.InstanceProvider.GetInstance (InstanceContext instanceContext, ileti iletisi) \ u000d \ u000a System at CreateAOS.BrokerAPI.WCFService.BrokerAPIService() \ u000d \ u000a. System.ServiceModel.InstanceContext.GetServiceInstance ServiceModel.Dispatcher.InstanceBehavior.GetInstance (InstanceContext instanceContext, Message request) \ u000d \ u000a System.ServiceMod at (Message message) \ u000d \ u000a el.Dispatcher.InstanceBehavior.EnsureServiceInstance (MessageRpc & RPC) \ u000d \ u000a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & RPC) de \ u000d \ u000a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 de (MessageRpc & RPC) \ System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & rPC) de u000d \ u000a \ u000d \ u000a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime de System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & rPC) \ u000d \ u000a de System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & rpc) \ u000d \ u000a at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessM .ProcessMessage2 (MessageRpc & rpc) \ u000d \ u000a System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) "} at essage1 (MessageRpc & rpc) \ u000d \ u000a

Bunu aşmanın bir yolu var mı? sınıfına uygulamadan

Servis 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); 
     } 
    } 
} 

aşağıdaki Ve

Benim Kod olan

[ServiceAspect(AttributeTargetElements = MulticastTargets.Method)] 
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, InstanceContextMode = InstanceContextMode.PerCall,IncludeExceptionDetailInFaults = true)] 
public class APIService : ServiceBase,IAPIService 
{ 

Hizmet yönünü kodumdan kaldırdığım anda beklendiği gibi çalışır.

[Serializable nitelik şimdi döner yerine [OnMethodBoundaryAspectConfiguration(SerializerType = typeof(MsilAspectSerializer))] Ayar DÜZENLEME

Bu aklıma, ama konu hizmet ettiğinden [Serializable] özniteliği başlamak olmamasıdır ServiceAspect üzerinde. [OnMethodBoundaryAspectConfiguration(SerializerType = typeof(MsilAspectSerializer))] serializable niteliğini değiştirme Method not found: 'Void API.Model.Infrastructure.Aspect.ServiceAspect.OnException(PostSharp.Aspects.MethodExecutionArgs

cevap

2

bu discussion de bakabilirsiniz Lütfen döndürür. Projenize PostSharp.dll iki farklı sürümleri olabilir gibi görünüyor.

+0

Teşekkürler, bu benim sorunumu çözdü, daha önceki bir proje benim UI üzerinde çalışırken, benim Domain projemde çalışan postsharp'ın yeni bir sürümü vardı, bu yüzden DLL'lerde bir çakışma vardı. – mahlatse