Service Host
Ein Service Host legt die Richtlinien fest, wie ein Service veröffentlicht wird. Dabei bezieht er sich immer auf einen Service und einen dem Service zugeordneten Service Contract.
Service Host Properties
Name
Name des Service Host. Dies ist gleichzeitig der Name der Klasse im IntelliSense.
Service
Über den Button Select Service wird der Service ausgewählt, den der Service Host nach außen hin anbieten soll.
Service Contract
Wenn am zugeordneten Service die Option Autogenerate Contract aktiviert ist, besteht hier am Service Host die Möglichkeit den vom Service generierten Service Contract zu verwenden, indem die Checkbox Use Autogenerated aktiviert wird.
Soll ein benutzerdefinierter Service Contract des Services genutzt werden, kann dieser mittels der Combobox ausgewählt werden.
Wenn in einer Customization eines Service Hosts zeitweise ein anderer Service Contract ausgewählt war, kann mit dem Button Inherit Contract wieder die Einstellung des Basis-Service Hosts übernommen werden.
Host Type
Hier wird ausgewählt, wie der Service Host den Service anbietet. Derzeit ist nur die Veröffentlichung als Windows Service möglich.
Generate REST Endpoint
Diese Option bestimmt, ob am Service Host automatisch ein zusätzlkicher Endpoint generiert wird, welcher alle Service-Methoden als JSON-API nach außen hin anbietet. Eine detaillierte Beschreibung dieser Funktionalität befindet sich im Kapitel REST Endpoint für Service-Methoden.
Use WebServiceHost instead of ServiceHost
Wählt die .NET Service Host-Klasse aus, von der der Service Host abgeleitet wird. Standard ist ServiceHost.
Launch Debugger on Startup
Wenn der Service über Framework Studio gestartet wird (siehe Start/Stop current development FSDomain), wird er im Development Service Host bereitgestellt. Ist Launch Debugger on StartUp aktiviert, erscheint beim Starten der FSDomain ein Fenster, in dem eine neue Instanz des VisualStudio Debugger erstellt werden kann.
Just-In-Time-Debugger:
Wird mit Ja bestätigt, wird der Code des Service im Visual Studio angezeigt, der Prozess des Development Service Hosts unterbrochen und es kann mit dem Debugging begonnen werden.
Registerkarte Service Behaviors
Base Address
Definiert die Adresse, an der der Webservice verfügbar gemacht werden soll. Aus der Combobox können von FS vorgegebene Adressen ausgewählt werden. Ist die Checkbox aktiviert, kann die Adresse überschrieben und manuell konfiguriert werden.
Es stehen folgende Platzhalter zur Verfügung:
%SERVER%
%PORT%
%REPOSITORY%
%VERSION%
%USER%
%HOSTNAME%
%HOSTFULLNAME%
Wird der Port mit 0
angegeben, wird zur Laufzeit ein freier Port vom System zugewiesen.
HttpGetEnabled
Diese Checkbox definiert, ob die Dienstmetadaten in Form von WSDL über HTTP/GET bereitgestellt werden. Ein Client kann also über die Adresse des Webservice inklusive eines angehängten ?wsdl die Definition des Webservice z.B. in einem Browser auslesen.
Beispiel:
Existiert ein Webservice auf dem lokalen System an der Adresse
http://localhost:8082/FSDemo/ArticleInfoService Host
kann die Definition dieses Service mit dem Aufruf
http://localhost:8082/FSDemo/ArticleInfoService Host?wsdl
eingesehen werden. Über diese Definition können Clients für diesen Webservice automatisch erstellt werden, z.B. in einem Visual Studio-Projekt oder einem anderen Framework Studio Package.
Warning
Wird keines der Häkchen gesetzt, kann ein Client, der die Implementierung des Webservice nicht kennt, die Definition für die Benutzung des Webservice via WSDL nicht auslesen. Der Client muss also wissen, welche Methoden mit welchen Parametern und Rückgabewerten an diesem Webservice veröffentlicht werden, um Aufrufe zu tätigen.
IncludeExceptionDetailInFaults
Sollte nach einem Request eines Clients an einen Webservice zur Laufzeit eine Exception auftreten, kann mit diesem Flag bestimmt werden, ob der Webservice die Details der geworfenen Exception mit in den SOAP-Envelope mit einbezieht, der als Response an den Client zurück geschickt wird.
Beispiel:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode mlns:a="http://schemas.microsoft.com/net/2005/12/wcf/dispatcher">
a:InternalServiceFault
</faultcode>
<faultstring xml:lang="en-US">
Exception in FindEmployeeByLastName
</faultstring>
<detail>
<ExceptionDetail xmlns="http:// org/2004/07/System.ServiceModel"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message>Exception in FindEmployeeByLastName</Message>
<StackTrace> at EmployeeService.ServiceImplementation.EmployeeManager. FindEmployeeByLastName( String request) in C:\Dev\EmployeeSvcManual\Source\Service\EmployeeService.ServiceImplementation\EmployeeManager.cs:line 25
at SyncInvokeFindEmployeeByLastName(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.InvokeDelegate.Invoke(Object target, Object[] inputs, Object[] outputs)
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1( MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
</StackTrace>
<Type>System.ApplicationException</Type>
</ExceptionDetail>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Der Client kann demnach den <detail>
-Block auswerten und in ein mögliches Error-Handling mit einbeziehen. Hier sind auch die Details der Exception, die zur Laufzeit der Webservice-Methode aufgetreten sind, zu sehen. Zusätzlich wird auch der gesamte Stack-Trace mit übergeben. Die Implementierung des Exceptionhandlings wird durch die meisten generierten Clients automatisch mit abgedeckt.
Caution
Diese Einstellung ist bei der Entwicklung von Webservices sehr hilfreich, sollte jedoch in produktivem Betrieb deaktiviert werden. Da der Stack-Trace dem Client einige Informationen über die internen Abläufe des Webservice offenbart, könnte der Webservice ggf. leicht angreifbar werden.
Textbox <ServiceBehavior>
Zusätzlich zu den per Checkbox auswählbaren Parametern können hier noch manuell Behavior-Attribute in Form von XML gesetzt werden. Diese werden beim Start des Service Hosts in die Web.config geschrieben.
Registerkarte EndPoints
EndPoint Konfiguration:
Hier können verschiedene Arten von EndPoints für den Webservice definiert werden. Beim Aufruf eines WCF-Services durchläuft der Request in der WCF-Runtime den sogenannten Stack-Channel. Dieser beschreibt, wie die Kommunikation zwischen Client und Server stattfindet. Er enthält Informationen zu Interoperabilität, Sicherheit, Protokollen, Encodierungen, Transaktionsfluss und vieles mehr (siehe auch http://msdn.microsoft.com/en-us/library/ms730879.aspx). Die EndPoints eines Webservice kapseln genau diese Informationen. Soll ein Webservice über unterschiedliche Kommunikationsarten aufrufbar sein, können mehrere EndPoints zu einem Webservice definiert werden (z.B. einer für HTTP und einer für die Kommunikation via NamedPipes).
Default Properties
Name
Name des EndPoints. Dieser ist auch in der WSDL-Definition des Webservice zu sehen.
Address
Adresse des EndPoints für den Webservice. In der Combobox werden seitens FS lokale Adressen zur Auswahl angeboten. Diese können mittels der Checkbox überschrieben werden.
Folgende Platzhalter stehen zur Verfügung:
%SERVER%
%PORT%
%REPOSITORY%
%HOSTNAME%
%ENDPOINT%
%VERSION%
%USER%
%HOSTNAME%
%HOSTFULLNAME%
Wird der Port mit 0 angegeben, wird zur Laufzeit ein freier Port vom System zugewiesen.
Binding
Hier wird die Binding des Services ausgewählt. In der Combobox stehen alle von WCF vordefinierten Bindings. Jede dieser Bindings generiert einen unterschiedlichen WCF-Stack-Channel und wirkt sich somit direkt auf die Kommunikation und Erreichbarkeit des Webservices aus. Eine genaue Beschreibung der unterschiedlichen Bindings befindet sich unter
http://msdn.microsoft.com/en-us/library/ms730879.aspx oder http://msdn.microsoft.com/en-us/magazine/cc163394.aspx
Binding Configuration
Sind auf der Registerkarte EndPoint Bindings Einträge vorhanden, können diese dem EndPoint zugewiesen werden.
Binding Name
Name der Binding in der WSDL-Definition.
Behavior
Sind auf der Registerkarte EndPoint Behaviors Einträge vorhanden, können diese dem EndPoint zugewiesen werden.
Additional Properties
Hier kann die EndPoint-Konfiguration mittels XML manuell erweitert werden. Beim Start des Service Hosts werden alle Eingaben in die Web.config übernommen.
Registerkarte EndPoint Bindings
EndPoint Binding Konfiguration:
Mit EndPoint Bindings lässt sich die Kommunikation - wenn erwünscht - zwischen Client und Webservice genauer spezifizieren. Wird in einen Service keine EndPoint Binding eingebunden, gelten die Default-Werte seitens der WCF-Spezifikation in Abhängigkeit des im EndPoint angegebenen Binding Types.
Name
Definiert den Namen der EndPoint Binding.
Binding Type
Definiert den Binding Type der EndPoint Binding.
Warning
Es können nur EndPoint Bindings zu EndPoints zugeordnet werden, die den gleichen Binding Type haben.
Default Properties
Die Werte werden je nach ausgewähltem Binding Type aktiviert oder deaktiviert. Als Standardwerte dienen die Standardwerte der WCF-Spezifikation.
AllowCookies
Kann nur bei HTTP-Bindings aktiviert werden. Wenn das Häkchen gesetzt ist, wird dem Webservice der Umgang mit Cookies erlaubt. Eine dem Webservice entsprechende Client-Implementierung beinhaltet dann das WCF-Managementsystem für den Umgang mit Cookies.
BypassProxyOnLocal
Wenn gesetzt, wird der Proxy vom System für alle Aufrufe ins Internet umgangen. Wenn nicht gesetzt, werden alle Aufrufe ins Internet durch den Proxy geleitet.
CloseTimeout
Definiert die Zeitspanne, die dem Webservice eingeräumt wird, um eine Close-Operation auszuführen.
OpenTimeout
Definiert die Zeitspanne, die dem Webservice eingeräumt wird, um eine Open-Operation auszuführen.
ReceiveTimeout
Definiert die Zeitspanne, die dem Webservice eingeräumt wird, um eine Empfangs-Operation auszuführen.
SendTimeout
Definiert die Zeitspanne, die dem Webservice eingeräumt wird, um eine Sende-Operation auszuführen.
HostNameComparisonMode
Mit diesem Wert werden die URI-Übereinstimmungsregeln angegeben, die vom Dispatcher eines Transportprotokolls wie HTTP, TCP oder NamedPipes beim Verteilen von eingehenden Nachrichten an die im Webservice verfügbaren EndPoints verwendet werden.
Jeder Wert von HostNameComparisonMode entspricht einer bestimmten Übereinstimmungsregel. Die Priorisierung der Übereinstimmungsregeln gestaltet sich wie folgt:
- StrongWildcard
- Exact
- WeakWildcard
StrongWildcard ignoriert den Hostnamen bei der Übereinstimmungsprüfung. Er hat die höchste Priorität der drei verschiedenen Übereinstimmungsmodi. Dies ist der Standardwert für eine von WCF bereitgestellte Binding. Dadurch wird angegeben, dass ein EndPoint eines Webservices mit jedem gültigen Hostnamen erreicht werden kann.
Beispiel:
Wenn MyService beispielsweise auf http://localhost/MyService gehostet wird, ist er immer noch über http://www.anotherhost.com/MyService erreichbar, da der Hostname anotherhost.com ignoriert wird.
Exact erfordert, dass mithilfe der angegebenen Url eine exakte Übereinstimmung, einschließlich des Host-Namens, gefunden werden muss, wenn sonst keine hinreichende Übereinstimmung erzielt werden kann mit der die Url genau einem EndPoint zugeordnet werden kann. Dieser Modus prüft z.B. nicht die Übereinstimmung von kurzen Hostnamen mit vollqualifizierten Domänennamen. Auf diese Weise können Hostnamen als Suchkriterien in solchen Szenarien verwendet werden, in denen mehreren Hosts die gleiche IP-Adresse zugewiesen wird.
WeakWildcard ignoriert den Hostnamen, wenn sonst keine hinreichende oder exakte Übereinstimmung erzielt werden kann.
MaxBufferPoolSize
Definiert die Größe des Hauptspeichers, welcher vom WCF-Message-Buffer-Manager für eingehende Nachrichten verwendet werden darf.
MaxBufferSize
Ein Wert in Bytes, welcher die maximale Größe des Puffers angibt, der die zu bearbeitenden Nachrichten für den EndPoint beinhaltet, zu dem diese Binding zugeordnet ist. Der Wert kann nicht kleiner als „MaxReceivedMessageSize“ sein.
MaxReceivedMessageSize
Ein Wert in Bytes, der die maximale Größe einer Nachricht zum verknüpften EndPoint angibt. Der Versender der Nachricht erhält als Antwort bei Überschreitung des Wertes einen SOAP-Fault. Der Webservice verwirft die eingehende Nachricht und schreibt das Ereignis in das Trace-Log.
TextEncoding
Definiert, wie der in der Nachricht enthaltene Text codiert ist. Beispiele: UFT-8, ISO-8559-1.
MessageEncoding
Je nach Binding Type stehen Text, Binary oder MTOM (Message Transmission Optimization Mechanism) zur Verfügung.
TransferMode
Definiert, wie die Nachrichten über den Stack-Channel versendet und gepuffert werden. Es stehen folgende Transfermodes zur Auswahl:
- Buffered: Die Anforderungs- und Antwort-Nachrichten werden gepuffert.
- Streamed: Die Anforderungs- und Antwort-Nachrichten werden per Stream übertragen.
- StreamedRequest: Die Anforderungsnachricht wird per Stream übertragen, und die Antwortnachricht wird gepuffert.
- StreamedResponse: Die Anforderungsnachricht wird gepuffert, und die Antwort-Nachricht wird per Stream übertragen.
UseDefaultWebProxy
Wenn im System ein Proxy hinterlegt ist, wird dieser vom Webservice mit der vom System veröffentlichten Konfiguration verwendet.
Reader Quotas Properties
maxArrayLength
Definiert die maximale Größe von Arrays, die in einer Nachricht übertragen werden dürfen.
maxBytesPerRead
Definiert die maximale Anzahl an Bytes die pro Lesevorgang zurückgegeben werden darf.
maxDepth
Definiert die maximale Knotentiefe, die pro Lesevorgang erreicht werden darf.
maxNameTableCharCount
Definiert die maximale Anzahl an Buchstaben, die ein Tabellenname beinhalten darf.
maxStringContentLength
Definiert die maximale Anzahl an Buchstaben im Inhalt von übertragenen XML-Elementen.
Additional Properties
Hier kann die EndPoint-Binding-Konfiguration mittels XML manuell erweitert werden. Beim Start des Service Hosts werden alle Eingaben in die Web.config übernommen.
Registerkarte EndPoint Behaviors
Ein EndPoint Behavior definiert ein Verhalten eines zugehörigen EndPoints. Wird in einem EndPoint kein explizites Verhalten angegeben, gelten die Standardwerte seitens der WCF-Spezifikation.
Name
Definiert den Namen der EndPoint Behavior.
Properties
enableWebScript
Aktiviert das Endpunktverhalten, durch das der Dienst über ASP.NET AJAX-Webseiten genutzt werden kann. Das Verhalten sollte nur in Verbindung mit entweder dem <webHttpBinding>
- oder dem <webMessageEncoding>
-Binding Type verwendet werden.
synchronousReceive
Gibt das Laufzeitverhalten für das Empfangen von Nachrichten in einem Dienst oder einer Clientanwendung an. Es enthält keine Attribute oder untergeordnete Elemente.
transactedBatching
Gibt an, ob Transaktionsbatching für Empfangsvorgänge unterstützt wird.
MaxBatchSize
Eine ganze Zahl, die die maximale Anzahl an Empfangsvorgängen angibt, die in einer Transaktion zusammengefasst werden können.
webhttp
Gibt WebHttpBehavior an, anhand der Konfiguration in einem Endpunkt. Wenn dieses Verhalten zusammen mit der
Hier können beliebig Methoden implementiert werden, die die Service Host-Klasse anbieten soll. Hier können beliebig Variablen für die Service Host-Klasse deklariert werden. Es können auch statische Variablen verwendet werden. Im Menüpunkt Edit befindet sich der Eintrag New proxy for this service host. Damit wird auf Basis des ausgewählten Service Hosts ein Service Proxy-Element (siehe Fehler! Verweisquelle konnte nicht gefunden werden.) im selben Namespace generiert, welches sich automatisch für den Zugriff auf einen EndPoint des Webservices konfiguriert. Dies erspart dem Programmierer das Anlegen eines Service Proxy-Elements und das manuelle Einbinden des zugehörigen Service Hosts und EndPoints. Service Hosts können abgeleitet und gecustomized werden. Alle Properties, Endpoints, Behaviors, Methoden usw. sind überschreib- oder änderbar.Registerkarte Methods
Registerkarte Variables
Generieren eines ServicesProxy aus einem Service Host
Ableiten und Customizen von Service Hosts