2011-01-12 8 views
1

Was ist die beste Vorgehensweise für mehrere WCF-Endpunkttypen? d. h .: JSON, JSONP, SOAP & POX? Ich benutze WCF 3.5.Was ist die beste Vorgehensweise für mehrere WCF-Endpunkttypen? d. h .: JSON, JSONP, SOAP & POX?

Zum Beispiel habe ich folgende JSONP Web-Service:

namespace RivWorks.Web.Service.JSONP 
{ 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    [ServiceContract(Name = "Negotiate", Namespace = "http://rivworks.com/Services/2009/01/15")] 
    public class Negotiate //: svcContracts.INegotiateService 
    { 
     #region Constructors 
     public NegotiateService() { } 
     #endregion 

     #region Methods 
     [OperationContract] 
     [WebGet(ResponseFormat = WebMessageFormat.Json)] 
     [JSONPBehavior(callback = "method")] 
     public dto.NegotiateSetup GetSetup(string method, string jsonInput) 
     { … } 

     [OperationContract] 
     [WebGet(ResponseFormat = WebMessageFormat.Json)] 
     [JSONPBehavior(callback = "method")] 
     public List<dto.NegotiateSetup> GetSetupAll(string method, string jsonInput) 
     { … } 
     #endregion 
    } 
} 

Nun, ich brauche eine SOAP und POX-Version verfügbar zu machen. Mein erster Gedanke war, ein WCF-Anwendungsprojekt für jeden Endpunkt des Diensttyps zu erstellen. Veröffentliche sie anschließend in einem App-Verzeichnis unter der Hauptwebsite.

ich habe einen internen „Bus“, dass der Arbeits Code lebt in ich will nur, dass die Bus-Code mit Service-Endpunkten von verschiedenen Arten wickeln.. Was ist der beste Weg, dies zu tun?

PS: Gibt es ein Tool zum Zusammenführen der WCF web.config (s) in die web.config der Hauptwebsite?

TIA

-kb


UPDATE: Wie gehen Sie über die verschiedenen Dekorateure Handhabung, die zu einer Methode Signatur angewendet werden kann. ie - Vergleichen die folgenden Verfahren (die identisch sind) und die mit ihnen verbundenen Dekoratore:

Decorator für eine POX-Endpunkt:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Xml)] 
public bool ValidateUser(string UserName, string Password) 
{ 
    ... 
} 

vs Decorator für einen JSON Endpunkt:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json)] 
public bool ValidateUser(string UserName, string Password) 
{ 
    ... 
} 

Und hier ist ein weiteres Beispiel, bei dem sich die Methodensignatur selbst ändert:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json)] 
[JSONPBehavior(callback = "method")] 
public dto.NegotiateSetup GetSetup(string method, string jsonInput) 
{ 
    // Deserialize the input and get all the data we need... 
    JObject o = Newtonsoft.Json.Linq.JObject.Parse(jsonInput); 
    string urlRef = String.Format("{0}", o["ref"]).Drop("\""); 
    string clientDate = String.Format("{0}", o["dt"]).Drop("\""); 
    string stringProductID = String.Format("({0})", o["productId"]).Drop("\"").Drop("(").Drop(")"); 
    string SKU = String.Format("{0}", o["sku"]).Drop("\""); 
    string env = String.Format("{0}", o["env"]).Drop("\""); 
    string stringCompanyID = String.Format("({0})", o["CompanyId"]).Drop("\"").Drop("(").Drop(")"); 
    string boolPortalFlag = String.Format("({0})", o["PortalFlag"]).Drop("\"").Drop("(").Drop(")"); 
... 
} 

vs einem Endpunkt Typ POX:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Xml)] 
public dto.NegotiateSetup GetSetup(string urlRef, string clientDate, string stringProductID, string SKU, string env, string stringCompanyID, string boolPortalFlag) 
{ 
... 
} 

Antwort

1

Warum würden Sie ein separates Projekt wollen? WCF kann viele Services an vielen Endpunkten in nur einem Projekt bereitstellen.

Fügen Sie die zusätzlichen Endpunkte einfach als .svc-Dateien hinzu. Tun Sie alles, was Sie mit dem Routing tun müssen, wenn Sie am Ende auf die ".svc" reagieren (denken Sie jedoch daran, dass Menschen die .svc nicht sehen).

+0

Alle Beispiele? Das Einrichten der Config-Datei sorgt immer noch für Verwirrung. Wenn ich das (vernünftig) in einem Projekt machen könnte, würde ich das viel lieber tun. Da Sie eine andere .svc-Datei eingerichtet haben, würde ich davon ausgehen, dass Sie eine WCF-Servicebibliothek anstelle der WCF-Dienstanwendung verwenden möchten. –

+0

Wie unterscheiden Sie im Code auch die Dekorateure? [Operation] [WebGet (Response = WebMessageFormat.Json)] [JSONPBehavior (= Callback "method")] public dto.NegotiateSetup GetSetup (string Methode, string jsonInput) ... für ... eaxample –

+0

@Keith: Ich weiß nicht, was du mit den Dekorateuren meinst. Kannst du deine Frage mit einem Beispiel aktualisieren, was du meinst? –

Verwandte Themen