application integration - Übergeben von Aufzählungswerten an einen Webdienst

Translate

Mein Dilemma ist im Grunde, wie man eine Aufzählung zwischen zwei Anwendungen teilt.

Die Benutzer laden Dokumente über eine Front-End-Anwendung hoch, die sich im Web befindet. Diese Anwendung ruft einen Webdienst der Back-End-Anwendung auf und leitet das Dokument an diese weiter. Die Backend-App speichert das Dokument und fügt eine Zeile in das einDokumentTabelle.

Die Dokumentart (7 mögliche Dokumenttypen:Rechnung, Vertragetc.) wird als Parameter an den Webdienst übergebenUploadDocumentMethode. Die Frage ist, wie der Typ (und mögliche Werte) dieses Parameters aussehen soll.

Da Sie diese Werte in beiden Anwendungen fest codieren müssen, ist es meiner Meinung nach in Ordnung, eine beschreibende Zeichenfolge zu verwenden (Rechnung, Vertrag, WorkOrder, SignedWorkOrder).

Ist es vielleicht ein besserer Ansatz, eine zu erstellenDocumentTypesAufzählung in der ersten Anwendung, und um es auch in der zweiten Anwendung zu reproduzieren, und dann den entsprechenden ganzzahligen Wert an den Webdienst zwischen ihnen übergeben?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ich kann nur über .net sprechen, aber wenn Sie einen ASP.net-Webservice haben, sollten Sie in der Lage sein, eine Aufzählung direkt hinzuzufügen.

Wenn Sie dann die "Webreferenz hinzufügen" in Ihrer Clientanwendung verwenden, sollte die resultierende Klasse diese Aufzählung enthalten

Aber das ist von oben, ich bin mir ziemlich sicher, dass ich es in der Vergangenheit getan habe, aber ich kann es nicht sicher sagen.

Quelle
Translate

Ich würde vorschlagen, keine Ganzzahl zwischen ihnen zu übergeben, nur um die Lesbarkeit und das Debuggen zu verbessern. Angenommen, Sie gehen Ihre Protokolle durch und sehen eine Reihe von 500 Fehlern für DocumentType = 4. Jetzt müssen Sie nachsehen, welcher DocumentType 4 ist. Oder wenn sich eine der Anwendungen auf eine Nummer bezieht, die in der anderen nicht vorhanden ist, möglicherweise aufgrund nicht übereinstimmender Versionen.

Es ist ein bisschen mehr Code, und es reibt den statischen Typ des Gehirns ein bisschen roh, aber in Protokollen über HTTP besteht die empfangene Weisheit darin, mit lesbaren Zeichenfolgen über undurchsichtigen Aufzählungen zu arbeiten.

Quelle
Translate

Ich würde die Aufzählung immer noch intern verwenden, aber von den Verbrauchern erwarten, dass sie mir nur den Namen und nicht den numerischen Wert selbst übergeben.

nur ein dummes Beispiel zur Veranschaulichung:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Quelle
Translate

In .NET werden Aufzählungswerte (standardmäßig) mit dem Namen in XML serialisiert. Für Fälle, in denen Sie mehrere Werte haben können (Flaggen), dann wird ein Leerzeichen zwischen die Werte gesetzt. Dies funktioniert, weil die Aufzählung keine Leerzeichen enthält, sodass Sie den Wert erneut erhalten können, indem Sie die Zeichenfolge aufteilen (z. B. "Rechnungsvertrag SignedWorkOrder" am Beispiel von lubos).

Sie können die Serialisierung von Werten in asp.net-Webdiensten mithilfe von steuernXmlEnumAttributeoder mit demEnumMemberAttribut bei Verwendung von WCF.

Quelle
Translate

Wenn Sie Ihren Webdienst von einer .NET-Seite / -Anwendung aus verwenden, sollten Sie auf die Aufzählung zugreifen können, nachdem Sie dem Projekt, das den Dienst verwendet, Ihre Webreferenz hinzugefügt haben.

Quelle
Translate

Wenn Sie nicht mit .NET to .NET SOAP arbeiten, können Sie dennoch einen Enumerator definieren, sofern beide Endpunkte WSDL verwenden.

<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>

Es liegt an der WSDL -> Proxy-Generator-Tool, diese in ein Enum-Äquivalent in der Client-Sprache zu analysieren.

Quelle
Translate

Es gibt einige ziemlich gute Gründe, nicht zu verwendenenums an einer solchen Schnittstellengrenze. ErwägenDare's Postzum Thema.

Quelle
Translate

Ich habe festgestellt, dass bei Verwendung von "Dienstreferenz hinzufügen" im Gegensatz zu "Webreferenz hinzufügen" von VS.net sowohl die tatsächlichen Aufzählungswerte als auch die Aufzählungsnamen angezeigt werden. Das ist wirklich ärgerlich, da ich sowohl 2.0- als auch 3.5-Clients unterstützen muss. Am Ende muss ich in den 2.0 generierten Webdienst-Proxy-Code gehen und die Aufzählungswerte jedes Mal manuell hinzufügen, wenn ich eine Änderung vornehme!

Quelle