Hvordan passere oppregnet verdier til en webtjeneste

stemmer
20

Mitt dilemma er, i utgangspunktet, hvordan å dele en oppregning mellom to programmer.

Brukerne laste opp dokumenter gjennom en front-end applikasjon som er på nettet. Denne applikasjonen krever en web-tjeneste av back-end program og sender dokumentet til det. Back-end app lagrer dokumentet og setter inn en rad i dokumenttabellen.

Dokumenttype (7 mulige dokumenttyper: Faktura , kontrakt etc.) føres som en parameter til webtjenesten s UploadDocument metode. Spørsmålet er, hva skal type (og mulige verdier) av denne parameteren bli?

Siden du trenger å hardcode disse verdiene i begge programmene, tror jeg det er OK å bruke en beskrivende streng ( faktura , kontrakt , WorkOrder , SignedWorkOrder ).

Er det kanskje en bedre tilnærming for å skape en DocumentTypes oppregning i det første programmet, og til å reprodusere det også i andre program, og deretter sende den tilsvarende heltallsverdi til webtjenesten mellom dem?

Publisert på 04/08/2008 klokken 23:43
kilden bruker
På andre språk...                            


8 svar

stemmer
6

Jeg vil fortsatt bruke opplisting internt, men forventer forbrukerne å passere meg bare navnet, ikke numerisk verdi i seg selv.

bare noen dum eksempel for å illustrere:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Svarte 05/08/2008 kl. 00:12
kilden bruker

stemmer
6

Jeg vil foreslå mot passerer et tall mellom dem, bare med henblikk på lesbarhet og feilsøking. Tenk deg at du går gjennom loggene og du ser en haug med 500 feil for dokumenttype = 4. Nå har du fått til å gå se opp som dokumenttype er 4. Eller hvis en av søknadene viser til en rekke som ikke finnes i den andre, kanskje på grunn av feilaktige versjoner.

Det er litt mer kode, og det smitter statisk typing delen av hjernen litt rå, men i protokoller på toppen av HTTP den mottatte visdom er å ta parti med leselige strenger enn ugjennomsiktig enumerations.

Svarte 04/08/2008 kl. 23:54
kilden bruker

stemmer
3

Hvis du ikke jobber med .NET til .NET SOAP, kan du likevel definere en enumeratoren gitt begge endepunktene bruker WSDL.

<s:simpleType name="MyEnum">    
     <s:restriction base="s:string">
          <s:enumeration value="Wow"/>
          <s:enumeration value="This"/>
          <s:enumeration value="Is"/>
          <s:enumeration value="Really"/>
          <s:enumeration value="Simple"/>
     </s:restriction>
</s:simpleType>

Det er opp til WSDL -> Proxy generator verktøy for å analysere det inn i en tilsvarende enum i klienten språk.

Svarte 07/09/2008 kl. 23:38
kilden bruker

stemmer
3

Hvis du er forbruker nett tjeneste fra en .NET side / program, bør du kunne få tilgang opptellingen etter at du har nett referanse til prosjektet som forbruker tjenesten.

Svarte 05/08/2008 kl. 01:34
kilden bruker

stemmer
3

I NET, opplisting verdier er (som standard) serialisert i xml med navnet. For tilfeller der du kan ha flere verdier ( flagg ), så det setter et mellomrom mellom verdiene. Dette fungerer fordi opptellingen ikke inneholder mellomrom, slik at du kan få verdien på nytt ved å splitte strengen (ie. "Faktura Contract SignedWorkOrder", ved hjelp av Lubos menn eksempel).

Du kan styre serialisering av verdier av i asp.net web-tjenester ved hjelp av XmlEnumAttribute , eller ved hjelp av EnumMember attributt ved bruk WCF.

Svarte 05/08/2008 kl. 01:26
kilden bruker

stemmer
3

Jeg kan bare snakke om .net, men hvis du har en ASP.net Webservice, bør du være i stand til å legge en oppregning direkte til det.

Når du deretter bruke "Add Web Reference" i klientprogrammet bør den resulterende Class består som enum

Men dette er fra toppen av hodet mitt, er jeg ganske sikker på at jeg har gjort det i det siste, men jeg kan ikke si sikkert.

Svarte 04/08/2008 kl. 23:56
kilden bruker

stemmer
2

Det er noen ganske gode grunner for ikke å bruke enums på et grensesnitt grense sånn. Tenk Dare innlegg om emnet.

Svarte 08/09/2008 kl. 12:35
kilden bruker

stemmer
0

Jeg har lagt merke til at når du bruker "Legg til tjeneste Reference" i motsetning til "Add Web Reference" fra VS.net, selve enum verdier kommer over så vel som enum navn. Dette er veldig irriterende som jeg trenger for å støtte både 2,0 og 3,5 klienter. Jeg ender opp med å gå inn i 2,0 generert webtjeneste proxy-kode og manuelt legge til enum verdier hver gang jeg gjør en endring!

Svarte 07/09/2008 kl. 23:21
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more