Jak przekazać wyliczone wartości do usługi internetowej

głosy
20

Mój dylemat jest, w zasadzie, jak dzielić wyliczenie pomiędzy dwoma aplikacjami.

Użytkownikom przesyłanie dokumentów za pośrednictwem aplikacji front-end, który jest w internecie. Ta aplikacja wywołuje usługi sieci web aplikacji back-end i przekazuje dokument do niego. Aplikacja back-end zapisuje dokument i wstawia wiersz w dokumencie tabeli.

Typ dokumentu (7 możliwych typów dokumentów: faktur , Kontrakt itd.) Jest przekazywana jako parametr do serwisu WWW UploadDocument metody. Chodzi o to, co powinno typ (i możliwe wartości) tego parametru będzie?

Ponieważ trzeba zakodować te wartości w obu aplikacjach, myślę, że jest OK, aby użyć ciągu opisowego ( faktury , zamówienia , WorkOrder , SignedWorkOrder ).

Czy może lepsze podejście do tworzenia DocumentTypes wyliczenie w pierwszej aplikacji, a także do odtworzenia go w drugiej aplikacji, a następnie przekazać odpowiednią wartość całkowitą do usługi internetowej między nimi?

Utwórz 05/08/2008 o 00:43
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
6

Sugeruję przeciwko przejściu liczbę całkowitą między nimi, po prostu dla celów czytelności i debugowania. Załóżmy, że przeżywa dzienników i widzisz kilka błędów dla DocumentType 500 = 4. Teraz masz ochotę patrzeć który DocumentType to 4. Albo, jeśli jeden z wniosków odnosi się do numeru, który nie istnieje w innych, być może ze względu na wersje niedopasowane.

To trochę więcej kodu, i to ściera statyczną część typowanie mózgu nieco surowy, ale w protokołach na szczycie HTTP odebrany mądrość jest na bok z czytelnych ciągów ponad nieprzezroczystych wyliczeń.

Odpowiedział 05/08/2008 o 00:54
źródło użytkownik

głosy
3

Mogę mówić tylko o .NET, ale jeśli masz WebService ASP.NET, powinieneś być w stanie dodać wyliczenie bezpośrednio do niego.

Gdy następnie użyć „Add Web Reference” w aplikacji klienta, wynikające Klasa powinna zawierać że enum

Ale to z góry głowę, jestem całkiem pewny, że zrobiłeś to w przeszłości, ale nie mogę powiedzieć na pewno.

Odpowiedział 05/08/2008 o 00:56
źródło użytkownik

głosy
6

I będzie nadal korzystać wyliczanie wewnętrznie, ale spodziewałbym konsumenci przechodzą mi tylko nazwę, a nie samą wartość liczbową.

tylko kilka przykładów w celu zilustrowania głupie:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Odpowiedział 05/08/2008 o 01:12
źródło użytkownik

głosy
3

W .NET, wyliczenie wartości są (domyślnie) szeregowane do xml z nazwą. Dla przypadków, w których można mieć wiele wartości ( flagi ), to stawia przestrzeń między wartościami. To działa, ponieważ wyliczenie nie zawiera spacje, dzięki czemu można uzyskać ponownie wartość poprzez podzielenie ciąg (tj. „Faktura kontraktu SignedWorkOrder”, za pomocą przykładu Lubos męska).

Można kontrolować serializacji wartościami asp.net usług internetowych wykorzystujących XmlEnumAttribute lub korzystających z EnumMember atrybut przy użyciu WCF.

Odpowiedział 05/08/2008 o 02:26
źródło użytkownik

głosy
3

Jeśli zużywają swoją usługę internetową ze strony .NET / aplikacji, powinieneś być w stanie uzyskać dostęp do wyliczenia po dodać odwołanie sieci Web do projektu, który zużywa usługi.

Odpowiedział 05/08/2008 o 02:34
źródło użytkownik

głosy
0

Zauważyłem, że podczas korzystania z „Dodaj usługi Reference” w przeciwieństwie do „Add Web Reference” z VS.Net, rzeczywiste wartości enum natknąć jak również nazwy enum. To jest naprawdę denerwujące, jak muszę obsługiwać zarówno klientów 2.0 i 3.5. I skończyć konieczności przechodzenia do 2,0 wygenerowany kod proxy usługi internetowej i ręczne dodanie wartości enum każdym razem, kiedy coś zmienić!

Odpowiedział 08/09/2008 o 00:21
źródło użytkownik

głosy
3

Jeśli nie pracujesz z .NET do .NET SOAP, nadal można zdefiniować wyliczający dostarczone oba punkty końcowe są za pomocą 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>

Jego do WSDL -> Narzędzie do analizowania generator Proxy że w ekwiwalencie enum w języku klienta.

Odpowiedział 08/09/2008 o 00:38
źródło użytkownik

głosy
2

Istnieją pewne dość dobre powody nieużywania enums na granicy interfejsu podobnego. Rozważmy Dare swoim wpisie na ten temat.

Odpowiedział 08/09/2008 o 13:35
źródło użytkownik

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