"The shell stopped unexpectedly and Explorer.exe was restarted."
Je zegt wat je nu hebt, maar je zegt niet waar je naartoe wil. Dan is het een beetje onmogelijk om iets zinnigs te zeggen.
https://fgheysels.github.io/
1
2
3
4
5
6
7
8
9
10
11
12
| [WebMethod]
public InfoObject GeneralMethod(method)
{
try
{
return method.Invoke();
}
catch (Exception ex)
{
throw GetSoapException(ex);
}
} |
Ik wil niet per WebMethod steeds die try-catch hebben, aangezien dat het geheel niet duidelijker maakt en dubbele code geeft. Maar het probleem is dat de aanroep binnen het try-block niet generiek is, het is steeds een andere method binnen de business laag en heeft ook verschillende signatures.
"The shell stopped unexpectedly and Explorer.exe was restarted."
Is het binnen een .NET WebService ook een globale exceptie handler te vinden?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Wat je can doen is een soort command pattern implementeren. Hoe? Wel je maakt voor elke WebMethod een class aan. Die class is dan verantwoordelijk om één bepaalde methode voor te stellen.
Bijvoorbeeld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| public interface ICommand{ void Execute() } public class GetOrderByIdCommand : ICommand{ public Order _order; public int _orderID; public Order _result; public void Execute(){ _result = _order.GetById(_orderID); } } [WebMethod] public OrderInfo GetById(int orderID){ GetOrderByIdCommand command = new GetOrderByIdCommand(); //command (al de parameters setten) WebMethodExecuteion.Execute(command); return command._result; } |
Dat is pseudo-code en ongeveer wat het command pattern zou moeten zijn. Ken het niet uit mijn hoofd dus zoek dat nog even op in google.
Nadeel is dat je nog heel wat classen bij creëert. Voordeel is dat al de exceptionhandling hetzelfde is.
Hier staat een veel betere uitleg
http://www.dofactory.com/Patterns/PatternCommand.aspx
[ Voor 5% gewijzigd door Vedett. op 14-03-2006 15:10 ]
Verwijderd
Als je in GetSoapException() nog iets anders doet dan alleen de exceptie te encapsuleren, dan is het misschien handig om een SoapExtension te maken i.p.v. je huidige aanpak met een catch-block in al(?) je web-methods.
Heb je daar misschien een voorbeeldje van?Verwijderd schreef op dinsdag 14 maart 2006 @ 21:44:
[..]Als je in GetSoapException() nog iets anders doet dan alleen de exceptie te encapsuleren, dan is het misschien handig om een SoapExtension te maken i.p.v. je huidige aanpak met een catch-block in al(?) je web-methods.
[ Voor 47% gewijzigd door jelmervos op 15-03-2006 16:10 ]
"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Daar is een SoapExtension uitermate geschikt voor. Ik heb niet zo snel een voorbeeldje bij de hand, maar de sample code (TraceExtension) die bij de MSDN-documentatie van SoapExtension staat, moet je op het goed spoor kunnen zetten.Kaassoevlee schreef op woensdag 15 maart 2006 @ 16:05:
Het doel is dat ik voor bepaalde (eigen) exceptie's die er optreden informatie (XML) toevoeg aan de SoapException, zodat op de client meer informatie beschikbaar is dat de huidige informatie die in de SoapException zit.
[...]
Heb je daar misschien een voorbeeldje van?
Het komt er op neer dat je een class maakt, die erft van de SoapExtension class en waarin pre- en/of post-processing van SOAP-messages mogelijk is.