WCF, null weil Parametername falsch geschrieben
-
Ich hatte mich in einem Server OperationContract bei einem Parameter-Namen vertippt, die Routine wurde erst lange nach der Implementation dann getestet und hat für diesen Parameter beim Aufruf immer null geliefert, es hat ein wenig gedauert bis mir die Ursache aufgefallen ist
kann man irgendwo einstellen das Parameter die nicht zugeordnet werden können nicht einfach ignorierte werden sondern z.B. eine Exception geworfen wird
oder kann man so ein Problem anders/besser vermeiden?
im Server
[ServiceContract()] public interface IMeinServer { //... [OperationContract()] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "MeineMethode")] void MeineMethode(Guid ClientId, List<ElementDto> Elements); //wenn ich den Parameter Elements in Element (ohne s) umbenenne kommt //beim Aufruf über den Client in dem Parameter nur null an //sind die Namen gleich bekomme ich die Liste wie erwartet //... }
im WPF/WCF Client
[ServiceContract(Name = "IMeinServer")] public interface IMeinClient { //... [OperationContract(AsyncPattern = true)] IAsyncResult BeginRegisterNotifications(Guid ClientId, List<ElementDto> Elements, AsyncCallback Callback, object AsyncState); //... }
-
beim Auf-Beispiel-reduzieren gleich mal einen Fehler eingebaut - laesst meine Aussage gleich schön unzuverlässig wirken :{
im WPF/WCF Client
"BeginRegisterNotifications" sollte in diesem Beispiel natürlich "BeginMeineMethode" heissen
-
Wenn ein Datenobjekt von IExtensibleDataObject ableitest dann bekommst du alles was sonst verworfen würde nach
ExtensionData
mit rein.
https://msdn.microsoft.com/en-us/library/system.runtime.serialization.iextensibledataobject(v=vs.110).aspx
Wenns um Parameter geht heisst das natürlich du müsstest die Parameter Message selbst definieren, was umständlich ist.Ansonsten kann man sich bei WCF an vielen Stellen reinhängen. Ich bin schon zu lange weg davon und hab zu viel wieder vergessen um dir nen konkreten Tip geben zu können, aber ich würde da mal googeln...
-
Wenn ein Datenobjekt von IExtensibleDataObject ableitest dann bekommst du alles was sonst verworfen würde nach ExtensionData mit rein.
mein Datenobjekt ist hier aber doch nicht das Problem (oder?)
der Parameter kann nicht zugeordnet werden und wird deswegen wahrscheinlich eben default-Initalisiert
das passiert höchstwahrscheinlich auch wenn mein mein Parameter(mit dem falschen Namen) vom Typ "List<int>" oder "int?" wäreoder kann man das was du hier ansprichst auch auf die Methode/Parameter Probleme anwenden?
-
hier beschreibt einer das gleiche Problem:
http://blog.functionalfun.net/2009/09/if-your-wcf-service-is-unexpectedly.html
nur eben keine gute Lösung außer "mach es eben richtig!"
-
keiner eine Idee?
-
jetzt hatte ich ein bisschen Zeit zum suchen:
schöne Lösung: [RequiredParametersBehavior]
http://thorarin.net/blog/post/2010/08/08/Controlling-WSDL-minOccurs-with-WCF.aspx
https://stackoverflow.com/questions/1438623/how-can-i-force-wcf-to-autogenerate-wsdls-with-required-method-parameters-minoc/3436039#3436039
-
Gast3 schrieb:
oder kann man das was du hier ansprichst auch auf die Methode/Parameter Probleme anwenden?
Ja, das sollte gehen.
Indem du die Message direkt definierst. Ist halt umständlicher.