Jak předat vyjmenované hodnoty k webové službě

hlasů
20

Moje dilema je, v podstatě, jak sdílet výčet mezi dvěma aplikacemi.

Uživatelé odesílat dokumenty přes front-end aplikace, která je na webu. Tato aplikace volá webové služby back-end aplikace a předá dokument k němu. Back-end aplikace uloží dokument a vloží řádek v dokumentu tabulce.

Typ dokumentu (7 možných typů dokumentů: faktury , Smlouva atd.), Je předán jako parametr k webové službě je UploadDocument metody. Otázkou je, jaký by měl být typ (a možné hodnoty) tohoto parametru bude?

Vzhledem k tomu je nutné napevno tyto hodnoty v obou aplikacích, myslím, že to je v pořádku použít popisný řetězec ( faktury , zadávacího řízení , WorkOrder , SignedWorkOrder ).

Je to možná i lepší přístup k vytvoření DocumentTypes výčtu při první žádosti, a to reprodukovat také v druhé aplikaci, a pak předat odpovídající celočíselnou hodnotu na webové službě mezi nimi?

Položena 05/08/2008 v 00:43
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
6

Chtěl bych i nadále používat výčet vnitřně, ale dalo očekávat spotřebitelé mi předat pouze název, nikoli číselnou hodnotu sám.

Jen někteří hloupý příklad pro ilustraci:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Odpovězeno 05/08/2008 v 01:12
zdroj uživatelem

hlasů
6

Já bych navrhnout proti přijetí celé číslo mezi nimi, jen pro účely čitelnosti a ladění. Řekněme, že jdete přes protokolech a vidíte spoustu 500 chyb pro DocumentType = 4. Teď musíš jít podívat do které DocumentType je 4. Nebo pokud jedna z aplikací odkazuje na číslo, které neexistuje v druhé, snad kvůli neodpovídající verze.

Je to trochu více kódu, a to tře statické psaní část mozku trochu syrové, ale v protokolech na vrcholu HTTP přijatý moudrost je sousedit s čitelnými řetězců nad neprůhlednými výčtů.

Odpovězeno 05/08/2008 v 00:54
zdroj uživatelem

hlasů
3

Pokud nejste pracovat s .NET .NET SOAP, stále můžete definovat výčtu předpokladu, že oba koncové body používají 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>

Jeho až WSDL -> nástroj generátor Proxy analyzovat, že do výčtu ekvivalent v jazyce klienta.

Odpovězeno 08/09/2008 v 00:38
zdroj uživatelem

hlasů
3

Pokud jste náročné webové služby z .NET stránky / aplikace, měli byste být schopni získat přístup k výčtu po přidat webový odkaz na projekt, který spotřebovává služby.

Odpovězeno 05/08/2008 v 02:34
zdroj uživatelem

hlasů
3

V .NET Hodnoty výčtu jsou (standardně) serializovat do XML s názvem. Pro případy, kdy můžete mít více hodnot ( flags ), pak to dává prostor mezi těmito hodnotami. To funguje, protože výčet neobsahuje mezery, takže můžete získat hodnotu opět rozdělením řetězec (tj. „Faktura Smlouva SignedWorkOrder“, za použití příkladu Luboš Dětské).

Můžete ovládat serializaci hodnot v asp.net webových služeb s využitím XmlEnumAttribute nebo pomocí EnumMember atribut při použití WCF.

Odpovězeno 05/08/2008 v 02:26
zdroj uživatelem

hlasů
3

Mohu mluvit jen o .NET, ale pokud máte ASP.NET webové služby, měli byste být schopni přidat výčtu přímo na něj.

Když se pak použijte „Přidat webový odkaz“ ve své klientské aplikace, výsledná třída by měla obsahovat tento výčet

Ale to je z horní části mé hlavy, jsem si jistá, že jsem to udělal v minulosti, ale nemohu říct s jistotou.

Odpovězeno 05/08/2008 v 00:56
zdroj uživatelem

hlasů
2

Tam jsou některé docela dobré důvody, proč nejsou použity enumů na hranici rozhraní takového. Vezměme si Dare psát na toto téma.

Odpovězeno 08/09/2008 v 13:35
zdroj uživatelem

hlasů
0

Všiml jsem si, že při použití „Přidat služby Reference“ v protikladu k „Přidat webový odkaz“ od VS.Net skutečné hodnoty výčtu narazit stejně jako názvy výčtu. To je opravdu nepříjemné, jak jsem třeba podporovat obě 2.0 a 3.5 klienty. I skončit museli jít do 2,0 generované webové služby proxy, kód a ručním přidáním ENUM hodnoty pokaždé, když jsem udělat změnu!

Odpovězeno 08/09/2008 v 00:21
zdroj uživatelem

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