Vă mulțumim pentru susținere

Cum să transmiteți valorile enumerate unui serviciu web

Dilema mea este, în principiu, cum să împărtășim o enumerare între două aplicații.

Utilizatorii încarcă documente printr-o aplicație front-end care se află pe web. Această aplicație solicită un serviciu web al aplicației de back-end și transmite documentul la acesta. Aplicația back-end salvează documentul și inserează un rând în tabela Document .

Tipul de document (7 tipuri posibile de documente: factură , Contract etc.) este trecut ca parametru al metodei UploadDocument serviciului web. Întrebarea este, ce ar trebui să fie tipul (și posibilele valori) acestui parametru?

Deoarece aveți nevoie să hardcode aceste valori în ambele aplicații, cred că este O.K. pentru a utiliza un șir descriptiv ( factură , contract , WorkOrder , SignedWorkOrder ).

Poate că este o abordare mai bună pentru a crea o enumerare DocumentTypes în prima aplicație și pentru ao reproduce și în cea de-a doua aplicație și apoi a trece întreaga valoare întreagă corespunzătoare serviciului web?

0
adăugat editat

8 răspunsuri

Nu pot vorbi decât despre .net, dar dacă aveți o ASP.net Webservice, ar trebui să puteți adăuga o enumerare directă la acesta.

Atunci când utilizați "Add Web Reference" în aplicația client, clasa rezultată ar trebui să includă acea enum

Dar asta e deasupra capului meu, sunt destul de sigur ca am facut-o in trecut, dar nu pot spune cu siguranta.

0
adăugat
@Dave Web Services încapsulează metodele, deci dacă nu există metode care să utilizeze un Enum, nu există nici un punct - de la o Perspectivă Web Service - pentru a avea o referință. Vă recomandăm să întrebați o întrebare separată cu o descriere a ceea ce doriți să faceți / de ce doriți un enum nereferențiat în ea.
adăugat autor Michael Stum
"Add Web Reference" creează enums, dar numai acelea care sunt menționate într-o anumită metodă. Pot adăuga manual enums fișierului Reference.cs generat automat și toate funcționează bine. Poate că aceasta este o întrebare separată, dar există vreo modalitate de a obține "Add Web Reference" pentru a adăuga toate enumurile într-un ansamblu de referință (dar nu este folosit în cod) fără a hacker fișierul Reference.cs manual?
adăugat autor Dave M

În .NET, valorile de enumerare sunt (în mod implicit) serializate în xml cu numele. Pentru instanțele în care puteți avea mai multe valori ( steaguri ), atunci se pune un spațiu între valori. Acest lucru se datorează faptului că enumerarea nu conține spații, astfel încât să puteți obține din nou valoarea prin divizarea șirului (de exemplu, "Invoice Contract SignedWorkOrder", folosind exemplul lui Lubos).

Puteți controla serializarea valorilor din serviciile web asp.net folosind XmlEnumAttribute sau folosind Atributul EnumMember atunci când se utilizează WCF.

0
adăugat

Dacă consumați serviciul Web dintr-o pagină / aplicație .NET, ar trebui să puteți accesa enumerarea după ce adăugați referința Web la proiectul care consumă serviciul.

0
adăugat

Există câteva motive destul de bune pentru a nu utiliza enum s pe o limită de interfață ca aceea. Luați în considerare Postați Dare pe această temă.

0
adăugat

Am observat că atunci când se utilizează "Add Service Reference" spre deosebire de "Add Web Reference" din VS.net, valorile actuale ale enum se întâlnesc precum și denumirile enum. Acest lucru este foarte enervant, deoarece am nevoie să sprijin atât 2.0 și 3.5 clienți. Am sfarsit prin a intra in codul proxy de servicii generat 2.0 si adaugand manual valorile enum de fiecare data cand fac o schimbare!

0
adăugat

Dacă nu lucrați cu .NET la .NET SOAP, puteți defini în continuare un enumerator cu condiția ca ambele puncte finite să utilizeze WSDL.

    
     
          
          
          
          
          
     

Its up to the WSDL -> Proxy generator tool to parse that into a enum equivalent in the client language.

0
adăugat

Încă aș folosi enumerarea pe plan intern, dar aș aștepta ca consumatorii să-mi transmită doar numele, nu valoarea numerică însăși.

doar un exemplu prost pentru a ilustra:

public enum DocumentType
{
  Invoice,
  Contract,
  WorkOrder,
  SignedWorkOrder
}

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
0
adăugat

Aș sugera să nu treceți un întreg între ele, pur și simplu pentru scopuri de citire și depanare. Spuneți că treceți prin jurnalele dvs. și vedeți o grămadă de 500 de erori pentru DocumentType = 4. Acum trebuie să mergeți să căutați ce DocumentType este 4. Sau dacă una dintre aplicații se referă la un număr care nu există în celălalt, probabil din cauza versiunilor neadecvate.

Este un cod mai mic și rupe porțiunea statică de tastare a creierului un pic brute, dar în protocoale deasupra HTTP, înțelepciunea primită este de a se potrivi cu șiruri lizibile peste enumerări opace.

0
adăugat