Frage

Ich habe eine Service-Schnittstelle:

[ServiceContract]
[ServiceKnownType(typeof(Models.ArticleImage))]
public interface IPhotoManagementService
{
    [OperationContract]
    bool Login(string username, string password);

    [OperationContract]
    bool IsLoggedIn();

    [OperationContract]
    void UpdateImage(string articleID, string selectedImage);
}

Wie man sehen kann ich ein typeof (Models.ArticleImage) auf meinem Servicecontract angeben.

So die WSDL dieses Dienstes bauen sollte ArticleImage verursachen in der WSDL-Pop-up. Unfortunarly bedeutet dies nicht passieren. Warum das?

ArticleImage hat Datacontract darauf. Und wenn ich eine ArticleImage in meiner Schnittstelle zurück, dann die WSDL tut abholen ArticleImage.

Edit: es nicht einmal in der Dienst Referenz im raubend Projekt Pop-up


Dies ist das Ergebnis einer Menge Tests:

  • Das Modell, das ich hinzufügen bin versucht, ein LINQ to SQL-Modell.
  • Wenn ich ein normales Modell mit ServiceKnownType hinzufügen funktioniert es.
  • Wenn ich meine LINQ to SQL Entitäten in meinem Schnittstelle verwenden, es funktioniert.
  • Wenn ich meine LINQ to SQL Entity durch ServiceKnownType hinzufügen es nicht Pop-up.
War es hilfreich?

Lösung

Warum sollte es brauchen? Wo steht Ihr Service etwas aussetzen, das könnte möglicherweise ein ArticleImage sein?

Re Ihren Kommentar; wenn [ServiceKnownType] verwendet, wird die zusätzliche trype noch in der „mex“ (verbraucht über „svcutil“) ausgesetzt - aber nicht von der WSDL. Verwenden Sie ein WCF-Client? Es sollte angezeigt werden (Ich habe gerade überprüft ... es tut). Im Allgemeinen jedoch vagee Daten von einem Web-Service-Rückkehr ist keine gute Idee ... Unterarten, sicher! Dictionary<string,ArticleImage> oder sogar Dictionary<string,SomeBaseType> (mit [KnownType] etc), fein! Aber object, HashTable, etc. -. Ist keine gute Idee (IMO)

Sie können auch zurückkehren nur eine Liste Ihres Typs (List<ArticleImage>), die in allen Szenarien funktionieren (und leicht für WSDL etc); und lassen Sie den Client das Wörterbuch an ihrem Ende machen.


Im Hinblick auf die LINQ-to-SQL; Objekte für „mex“ Notwendigkeit, mit [DataContract] / [DataMember] dekoriert werden. Sie können dies in der entworfen, indem die „Serialisierung“ Eigenschaft für die dbml Makel. Mit diesem Set (Serialisierung Mode = unidirektional), sollte es funktionieren. Um ehrlich zu sein, aber ich glaube, Sie besser dran, nur ein Dummy-Methode hinzufügen, die den Typ explizit auf die API macht.

Andere Tipps

Nur Typen als Ein- / Ausgabeparameter der Dienstleistungsauftrag Operationen werden in der WSDL veröffentlicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top