2016-08-08 6 views
1

Ich habe Restful WCF-Dienst, der verwendet wird, um den Datenschub durch einen anderen Restful-Dienst zu lesen, der irgendwo im Internet gehostet wird. Ich muss eine Methode offenlegen, um den JSON-Datenschub durch den anderen Dienst zu lesen.WCF Operation Vertragstyp im Falle von Push-Benachrichtigung Nachricht erhalten?

[ServiceContract] 
public interface ITestService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json)] 
    string GetData(string JsonData); 
} 

Ist es in Ordnung, die Push-Nachricht in GET-Methode zu erhalten? Der Push-Dienst kann auch mehrere Daten gleichzeitig senden. Wie kann ich es beschränken, damit mein Server auch mit Massendaten funktioniert.

Grüße

Antwort

1

Ich habe Restful WCF-Dienst, der verwendet wird, um den Daten-Push von anderen Restful Dienst gehostet irgendwo im Internet zu lesen.

"Push" ist wahrscheinlich das falsche Wort; Es erinnert an den Server-Push, der eine andere Bedeutung hat als die, die Sie hier verwenden. Genauer gesagt, Sie haben einen Dienst, den ein anderer Dienst aufrufen wird, indem er einige Daten übermittelt.

Ist es in Ordnung, die Push-Nachricht in GET-Methode zu erhalten?

Nein, es ist nicht in Ordnung. GET-Operationen übergeben nur Daten für die Abfragezeichenfolge. Dies wäre für sehr kurze Strings, die aus JSON bestehen, in Ordnung (wenn auch ziemlich ungewöhnlich), aber längere Strings würden das maximale Größenlimit für die Abfragezeichenfolge in jedem Technologie-Stack, den Sie gerade verwenden, verletzen.

eine POST-Operation verwenden funktionieren würde:

[ServiceContract] 
public interface ITestService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "GetData")] 
    string GetData(string JsonData); 
} 

Allerdings müßten Sie noch manuell das JSON-String tatsächlich verarbeiten. Die gängigste Art und Weise, dies zu tun wäre, um einen C# Typen zu definieren, die Serialisierung des JSON unterstützt:

[ServiceContract] 
public interface ITestService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "GetData")] 
    string GetData(MyData data); 
} 

Wo MyData ein C# Typ ist, der auf Ihre JSON Nutzlast entspricht. Der JSON wird für eine Instanz von MyData, die in Ihrer Methode zur Verfügung gestellt wird, sauber deserialisiert.

+0

Danke Tom. Mein WCF-Dienst konnte die Bulk-Daten sofort abrufen. Gibt es eine Möglichkeit, es zu beschränken, damit mein Server DOS-Problem nicht erhält. –

+0

@EhsanHafeez es gibt nichts, was Sie tun können über ddos ​​Angriffe auf Ihren Service über das hinaus, was Sie normalerweise tun würden: http://linuxgazette.net/126/cherian.html –

Verwandte Themen