2017-12-13 6 views
0

Einige Integer-Konstanten werden vom WCF-Client vor dem Aufruf des WCF-Dienstes berechnet. Ich möchte, dass diese Integer-Konstanten im WCF-Service verfügbar sind. Bitte beachten Sie, dass ich nicht möchte, dass sie als Methodenargumente verwendet werden, da diese Konstanten unabhängig von der Methode im Service benötigt werden. Das gleiche Argument für jede Methode wäre redundant.Freigabekonstanten für alle WCF-Aufrufe zwischen Client und Server

Um klar zu sein, berechnet der Client die Werte für "a" und "b", bevor er einen WCF-Serviceanruf tätigt. Sobald der Anruf getätigt wird, kann während des gesamten Anrufs "a" und "b" vom Dienst abgerufen werden. Dies ähnelt der Verwendung als Argumente der Methode. Der einzige Unterschied besteht darin, dass "a" und "b" von jeder Methode im WCF-Dienst benötigt werden. Daher würde ich eine bessere Lösung bevorzugen, als 'a' und 'b' als Argumente für jede Methode im WCF-Aufruf hinzuzufügen. So

, lassen Sie uns sagen, ich habe drei Methoden in WCF service->

void Count1() 

void Count2() 

void Count3() 

Kunde unterschiedlich berechnen wird 'a' und 'b' Werte für jeden WCF Methodenaufruf. Eine Lösung besteht darin, die Methoden in diesem Format zu behalten.

void Count1(int a, int b) 

void Count2(int a, int b) 

void Count3(int a, int b) 

Aber ich würde gerne eine bessere Lösung, wenn möglich.

Sorry über diese lange Frage.

+0

Senden Sie sie, sobald sie berechnet sind, und behalten Sie sie irgendwo im WCF (statische Mitglieder oder in MemoryCache, sogar in einer Datenbank oder in einer Textdatei - alles abhängig von Ihren Bedürfnissen). –

+0

@ZoharPeled Wenn Sie "senden" sagen, meinen Sie als Argumente? Ich möchte nicht 2 Argumente über alle meine Methoden in WCF hinzufügen. Diese Argumente werden definitiv von allen Methoden benötigt. Ich würde eine sauberere Lösung brauchen. – Sandy

+0

Ja, als Argumente, aber nur einmal. Wenn Sie sie in die WCF bekommen, speichern Sie sie auf der Serverseite –

Antwort

1

Sie könnten eine "Anfrage" -Klasse für Ihren Service als Datenvertrag erstellen und in diese Anfrage a, b und alle anderen Werte aufnehmen, die Sie vom Kunden erhalten möchten. Eine Basisanforderung würde nur a und b behalten, aber andere Anforderungen könnten daraus abgeleitet werden.
Auf diese Weise senden Sie für jede Methode nur einen Parameter an den Service.

0

Dies ist kein normaler Modus für WCF-Dienste. Sie können jedoch eine "sticky" Serviceklasse erstellen, die für die Dauer des Clients gültig ist. Beachten Sie, dass die InstanceContextMode auf Sitzung gesetzt ist, was bedeutet, dass diese Klasseninstanz so lange blockiert bleibt, wie der Client nicht getrennt/abgebrochen wurde oder keine Zeitüberschreitung auftritt (Sie müssen einen periodischen Impuls senden, um ihn bei Ihrem Client wach zu halten) ist nicht gesprächig). Achten Sie auch auf die ConcurrencyMode.

[ServiceBehavior(Name = "MyStickyServicee", 
    InstanceContextMode = InstanceContextMode.PerSession, 
    ConcurrencyMode = ConcurrencyMode.Single)] 

public class MyStickyService : IMyStickyService, IDisposable 
{ 
} 

Hier finden Sie weitere Informationen zu instancing in wcf.

Verwandte Themen