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ştirmeMethod not found: 'Void API.Model.Infrastructure.Aspect.ServiceAspect.OnException(PostSharp.Aspects.MethodExecutionArgs
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