Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können den SQL-Adapter so konfigurieren, dass stark typisierte Abrufnachrichten von SQL Server empfangen werden. Sie können eine Abfrage-Anweisung angeben, die der Adapter ausführt, um die Datenbank abzufragen. Die Abfrage-Anweisung kann eine SELECT-Anweisung oder eine gespeicherte Prozedur sein, die eine Ergebnismenge zurückgibt. Sie müssen in einem Szenario, in dem Sie eine stark typisierte Ergebnisdatenmenge erhalten möchten, strikt typisiertes Polling verwenden. Weitere Informationen dazu, wie der Adapter stark typierte Abrufe unterstützt, finden Sie unter "Support für eingehende Anrufe mithilfe von Umfragen".
Von Bedeutung
Wenn Sie mehr als einen Abrufvorgang in einer einzelnen Anwendung ausführen möchten, müssen Sie eine InboundID-Verbindungseigenschaft als Teil des Verbindungs-URI angeben, um ihn eindeutig zu machen. Die von Ihnen angegebene eingehende ID wird dem Vorgangsnamespace hinzugefügt, um sie eindeutig zu machen.
Wie in diesem Thema die Abfrage veranschaulicht wird
In diesem Thema zeigen Sie, wie der SQL-Adapter das Empfangen stark typierter Datenänderungsmeldungen unterstützt, erstellen Sie eine .NET-Anwendung und generieren den WCF-Dienstvertrag für den TypedPolling-Vorgang . Stellen Sie sicher, dass Sie beim Generieren des WCF-Dienstvertrags Folgendes angeben:
Sie müssen eine InboundID als Teil des Verbindungs-URI angeben.
Sie müssen eine Abrufanweisung für die PollingStatement-Bindungseigenschaft angeben.
Wenn Sie beim Generieren der Proxyklasse weitere Bindungseigenschaften angeben möchten, geben Sie die PolledDataAvailableStatement wie folgt an:
SELECT COUNT(*) FROM Employee
Der PolledDataAvailableStatement muss ein Resultset mit der ersten Zelle zurückgeben, die einen positiven Wert enthält. Wenn die erste Zelle keinen positiven Wert enthält, führt der Adapter die Abfrageanweisung nicht aus.
Führen Sie im Rahmen der Abfrageanweisung die folgenden Operationen aus:
Wählen Sie alle Zeilen aus der Tabelle "Mitarbeiter" aus.
Führen Sie eine gespeicherte Prozedur (MOVE_EMP_DATA) aus, um alle Datensätze aus der Tabelle "Mitarbeiter" in eine EmployeeHistory-Tabelle zu verschieben.
Führen Sie eine gespeicherte Prozedur (ADD_EMP_DETAILS) aus, um der Tabelle "Mitarbeiter" einen neuen Datensatz hinzuzufügen. Bei diesem Verfahren werden der Mitarbeitername, die Bezeichnung und das Gehalt als Parameter verwendet.
Zum Ausführen dieser Vorgänge müssen Sie Folgendes für die PollingStatement-Bindungseigenschaft angeben, während Sie den WCF-Dienstvertrag und die Hilfsklassen generieren.
SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000
Nachdem die Abfrage-Anweisung ausgeführt wurde, werden alle Datensätze aus der Tabelle "Mitarbeiter" ausgewählt, und die Nachricht von SQL Server wird empfangen. Nachdem die gespeicherte MOVE_EMP_DATA Prozedur vom Adapter ausgeführt wurde, werden alle Datensätze in die EmployeeHistory-Tabelle verschoben. Anschließend wird die gespeicherte Prozedur ADD_EMP_DETAILS ausgeführt, um der Tabelle "Mitarbeiter" einen neuen Datensatz hinzuzufügen. Die nächste Abfrageausführung gibt nur einen einzelnen Datensatz zurück. Dieser Zyklus wird fortgesetzt, bis Sie den Diensthost schließen.
Konfigurieren des typierten Abfragevorgangs unter Verwendung der Eigenschaften der SQL-Adapterbindung
In der folgenden Tabelle sind die SQL-Adapterbindungseigenschaften zusammengefasst, die Sie zum Konfigurieren des Adapters zum Empfangen von Datenänderungsmeldungen verwenden. Abgesehen von der PollingStatement-Bindungseigenschaft sind alle anderen in diesem Abschnitt aufgeführten Bindungseigenschaften erforderlich, während sie die .NET-Anwendung ausführen. Sie müssen die PollingStatement-Bindungseigenschaft angeben, bevor Sie den WCF-Dienstvertrag TypedPolling-Vorgang generieren.
| Binding-Eigenschaft | BESCHREIBUNG |
|---|---|
| InboundOperationType | Gibt an, ob Sie Abfragen, TypedPolling oder Benachrichtigungsvorgänge ausführen möchten. Der Standardwert ist Polling. Um stark typisierte Abrufnachrichten zu empfangen, legen Sie dies auf TypedPolling fest. |
| Abfrage-Datenverfügbarkeitserklärung | Gibt die SQL-Anweisung an, die der Adapter ausführt, um zu bestimmen, ob Daten für die Abfrage verfügbar sind. Die SQL-Anweisung muss ein Resultset zurückgeben, das aus Zeilen und Spalten besteht. Nur wenn eine Zeile verfügbar ist, wird die für die PollingStatement-Bindungseigenschaft angegebene SQL-Anweisung ausgeführt. |
| PollingIntervalInSeconds | Gibt das Intervall in Sekunden an, in dem der SQL-Adapter die für die Bindungseigenschaft PolledDataAvailableStatement angegebene Anweisung ausführt. Der Standardwert ist 30 Sekunden. Das Abrufintervall bestimmt das Zeitintervall zwischen aufeinander folgenden Abfragen. Wenn die Anweisung innerhalb des angegebenen Intervalls ausgeführt wird, wartet der Adapter auf die verbleibende Zeit im Intervall. |
| PollingStatement | Gibt die SQL-Anweisung an, um die SQL Server-Datenbanktabelle abzufragen. Sie können eine einfache SELECT-Anweisung oder eine gespeicherte Prozedur für die Abfrage-Anweisung angeben. Der Standardwert ist NULL. Sie müssen einen Wert für PollingStatement angeben, um die Abfrage zu aktivieren. Die Abfrageanweisung wird nur ausgeführt, wenn Daten für die Abfrage verfügbar sind, die von der Bindungseigenschaft PolledDataAvailableStatement bestimmt wird. Sie können eine beliebige Anzahl von SQL-Anweisungen angeben, die durch ein Semikolon getrennt sind. Wichtig: Für TypedPolling müssen Sie diese Bindungseigenschaft angeben, bevor Metadaten generiert werden. |
| PollWhileDataFound | Gibt an, ob der SQL-Adapter das Abrufintervall ignoriert und kontinuierlich die FÜR die Bindungseigenschaft PolledDataAvailableStatement angegebene SQL-Anweisung ausführt, wenn Daten in der abgerufenen Tabelle verfügbar sind. Wenn in der Tabelle keine Daten verfügbar sind, kehrt der Adapter darauf zurück, die SQL-Anweisung zum angegebenen Abfrageintervall auszuführen. Die Standardeinstellung lautet false. |
Eine ausführlichere Beschreibung dieser Eigenschaften finden Sie unter BizTalk Adapter für SQL Server-Adapterbindungseigenschaften. Eine vollständige Beschreibung der Verwendung des SQL-Adapters zum Abrufen von SQL Server finden Sie weiter.
Konfigurieren eines stark typisierten Abfrageverfahrens im WCF-Dienstmodell
Um den Abrufvorgang zu erhalten, wenn Sie das WCF-Dienstmodell verwenden, müssen Sie:
Generieren Sie einen WCF-Dienstvertrag (Schnittstelle) für den TypedPolling-Vorgang aus den Metadaten, die vom Adapter verfügbar gemacht werden. Dazu können Sie das Visual Studio-Plug-In "Adapterdienstreferenz hinzufügen" verwenden. Stellen Sie beim Generieren des WCF-Dienstvertrags für dieses Beispiel folgendes sicher:
Sie setzen die Inbound-ID als Mitarbeiter fest.
Sie geben eine Abfrageanweisung für die PollingStatement-Bindungseigenschaft an. Geben Sie in diesem Beispiel die Abfrageanweisung folgendermaßen an:
SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000
Implementieren Sie einen WCF-Dienst über diese Schnittstelle.
Hosten Sie diesen WCF-Dienst mithilfe eines Diensthosts (System.ServiceModel.ServiceHost).
Informationen zu den in diesem Thema verwendeten Beispielen
In den Beispielen in diesem Thema wird die Tabelle "Mitarbeiter" abgefragt. Im Beispiel werden auch die gespeicherte Prozedur MOVE_EMP_DATA und ADD_EMP_DETAILS verwendet. Ein Skript zum Generieren dieser Artefakte wird mit den Beispielen bereitgestellt. Weitere Informationen zu den Beispielen finden Sie unter Beispiele für den SQL-Adapter. Ein Beispiel, TypedPolling_ServiceModel, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt.
WCF-Dienstvertrag und -Klasse
Sie können das Add Adapter Service Reference Plug-In verwenden, um einen WCF-Dienstvertrag (Schnittstelle) und unterstützende Klassen für den TypedPolling-Vorgang zu erstellen. Weitere Informationen zum Generieren eines WCF-Dienstvertrags finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artifacts.
Der WCF-Servicekontrakt (Schnittstelle)
Der folgende Code zeigt den WCF-Dienstvertrag (Schnittstelle), der für den TypedPolling-Vorgang generiert wurde.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://schemas.microsoft.com/Sql/2008/05/", ConfigurationName="TypedPolling_Employee")]
public interface TypedPolling_Employee {
// CODEGEN: Generating message contract since the wrapper namespace (https://schemas.microsoft.com/Sql/2008/05/TypedPolling/Employee) of message TypedPolling
// does not match the default value (https://schemas.microsoft.com/Sql/2008/05/)
[System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="TypedPolling")]
void TypedPolling(TypedPolling request);
}
Die Nachrichtenverträge
Der Nachrichtenvertragsnamespace wird durch den Parameter "InboundID " im Verbindungs-URI geändert, sofern angegeben. In diesem Beispiel haben Sie die eingehende ID als Mitarbeiter angegeben. Die Anforderungsnachricht gibt eine stark typisierte Ergebnismenge zurück.
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="TypedPolling", WrapperNamespace="http://schemas.microsoft.com/Sql/2008/05/TypedPolling/Employee", IsWrapped=true)]
public partial class TypedPolling {
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemas.microsoft.com/Sql/2008/05/TypedPolling/Employee", Order=0)]
public schemas.microsoft.com.Sql._2008._05.TypedPolling.Employee.TypedPollingResultSet0[] TypedPollingResultSet0;
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemas.microsoft.com/Sql/2008/05/TypedPolling/Employee", Order=1)]
public schemas.microsoft.com.Sql._2008._05.TypedPolling.Employee.TypedPollingResultSet1[] TypedPollingResultSet1;
public TypedPolling() {
}
public TypedPolling(schemas.microsoft.com.Sql._2008._05.TypedPolling.Employee.TypedPollingResultSet0[] TypedPollingResultSet0, schemas.microsoft.com.Sql._2008._05.TypedPolling.Employee.TypedPollingResultSet1[] TypedPollingResultSet1) {
this.TypedPollingResultSet0 = TypedPollingResultSet0;
this.TypedPollingResultSet1 = TypedPollingResultSet1;
}
}
WCF-Dienstklasse
Das Add-Adapter Service Reference Plug-In generiert auch eine Datei, die über einen Stub für die WCF-Dienstklasse verfügt, die aus dem Dienstvertrag (Schnittstelle) implementiert wurde. Der Name der Datei ist SqlAdapterBindingService.cs. Sie können die Logik einfügen, um den TypedPolling-Vorgang direkt in diese Klasse zu verarbeiten. Der folgende Code zeigt die WCF-Dienstklasse, die vom Add Adapter Service Reference Plug-In generiert wird.
namespace SqlAdapterBindingNamespace {
public class SqlAdapterBindingService : TypedPolling_Employee {
// CODEGEN: Generating message contract since the wrapper namespace (https://schemas.microsoft.com/Sql/2008/05/TypedPolling/Employee) of message TypedPolling
// does not match the default value (https://schemas.microsoft.com/Sql/2008/05/)
public virtual void TypedPolling(TypedPolling request) {
throw new System.NotImplementedException("The method or operation is not implemented.");
}
}
}
Empfangen stark typierter eingehender Nachrichten für den Abrufvorgang
Dieser Abschnitt enthält Anweisungen zum Schreiben einer .NET-Anwendung zum Empfangen stark typierter eingehender Abrufnachrichten mithilfe des SQL-Adapters.
Verwenden Sie das Add Adapter Service Reference Plug-In, um einen WCF-Dienstvertrag (Schnittstelle) und Hilfsklassen für den TypedPolling-Vorgang zu generieren. Stellen Sie sicher, dass Sie beim Generieren des WCF-Dienstvertrags für dieses Beispiel Folgendes angeben:
Sie müssen die Inbound-ID als Mitarbeiter angeben.
Sie müssen eine Abrufanweisung für die PollingStatement-Bindungseigenschaft angeben. Geben Sie in diesem Beispiel die Abfrageanweisung folgendermaßen an:
SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000Weitere Informationen finden Sie unter Generieren eines WCF-Client- oder WCF-Dienstvertrags für SQL Server-Artefakte. Optional können Sie die Bindungseigenschaften beim Generieren des Dienstvertrags und der Hilfsklassen angeben. Dadurch wird sichergestellt, dass sie in der generierten Konfigurationsdatei ordnungsgemäß festgelegt sind.
Implementieren Sie einen WCF-Dienst über die Schnittstelle und Hilfsklassen, die in Schritt 1 generiert wurden. Die TypedPolling-Methode dieser Klasse kann eine Ausnahme auslösen, um die Abruftransaktion abzubrechen, wenn beim Verarbeiten der daten, die vom TypedPolling-Vorgang empfangen wurden, ein Fehler aufgetreten ist; andernfalls gibt die Methode nichts zurück. Sie müssen die WCF-Dienstklasse wie folgt attributen:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]Innerhalb der TypedPolling-Methode können Sie Ihre Anwendungslogik direkt implementieren. Diese Klasse finden Sie in SqlAdapterBindingService.cs. In diesem Beispiel erweitert der Code die SqlAdapterBindingService-Klasse. In diesem Code wird die als stark typiertes Resultset empfangene Polling-Nachricht in die Konsole geschrieben.
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class PollingService : SqlAdapterBindingNamespace.SqlAdapterBindingService { public override void TypedPolling(TypedPolling request) { Console.WriteLine("\nNew Polling Records Received"); Console.WriteLine("*************************************************"); Console.WriteLine("Employee ID\tName\tDesignation\tSalary"); for (int i = 0; i < request.TypedPollingResultSet0.Length; i++) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", request.TypedPollingResultSet0[i].Employee_ID, request.TypedPollingResultSet0[i].Name, request.TypedPollingResultSet0[i].Designation, request.TypedPollingResultSet0[i].Salary); } Console.WriteLine("*************************************************"); Console.WriteLine("\nHit <RETURN> to stop polling"); } }Da der SQL-Adapter Anmeldeinformationen nicht als Teil des Verbindungs-URI akzeptiert, müssen Sie die folgende Klasse implementieren, um Anmeldeinformationen für die SQL Server-Datenbank zu übergeben. Im letzten Teil der Anwendung instanziieren Sie diese Klasse, um die SQL Server-Anmeldeinformationen zu übergeben.
class PollingCredentials : ClientCredentials, IServiceBehavior { public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) { bindingParameters.Add(this); } public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { } public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { } protected override ClientCredentials CloneCore() { ClientCredentials clone = new PollingCredentials(); clone.UserName.UserName = this.UserName.UserName; clone.UserName.Password = this.UserName.Password; return clone; } }Erstellen Sie eine SqlAdapterBinding und konfigurieren Sie den Abrufvorgang, indem Sie die Bindungseigenschaften angeben. Sie können dies entweder explizit im Code oder deklarativ in der Konfiguration tun. Sie müssen mindestens den "InboundOperationType", " PolledDataAvailableStatement" und "PollingStatement" angeben.
SqlAdapterBinding binding = new SqlAdapterBinding(); binding.InboundOperationType = InboundOperation.TypedPolling; binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM EMPLOYEE"; binding.PollingStatement = "SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000";Geben Sie SQL Server-Datenbankanmeldeinformationen an, indem Sie die PollingCredentials-Klasse instanziieren, die Sie in Schritt 3 erstellt haben.
PollingCredentials credentials = new PollingCredentials(); credentials.UserName.UserName = "<Enter user name here>"; credentials.UserName.Password = "<Enter password here>";Erstellen Sie eine Instanz des WCF-Diensts, der in Schritt 2 erstellt wurde.
// create service instance PollingService service = new PollingService();Erstellen Sie eine Instanz von System.ServiceModel.ServiceHost mithilfe des WCF-Diensts und eines Basisverbindungs-URI. Der Basisverbindungs-URI darf die eingehende ID nicht enthalten. Sie müssen hier auch die Anmeldeinformationen angeben.
// Enable service host Uri[] baseUri = new Uri[] { new Uri("mssql://mysqlserver//mydatabase") }; ServiceHost serviceHost = new ServiceHost(service, baseUri); serviceHost.Description.Behaviors.Add(credentials);Fügen Sie dem Diensthost einen Dienstendpunkt hinzu. Um dies zu tun:
Verwenden Sie die in Schritt 4 erstellte Bindung.
Geben Sie einen Verbindungs-URI an, der Anmeldeinformationen und ggf. eine Eingangs-ID enthält.
Geben Sie den Vertrag als "TypedPolling_Employee" an.
// Add service endpoint: be sure to specify TypedPolling_Employee as the contract Uri ConnectionUri = new Uri("mssql://mysqlserver//mydatabase?InboundID=Employee"); serviceHost.AddServiceEndpoint("TypedPolling_Employee", binding, ConnectionUri);Um Umfragedaten zu empfangen, öffnen Sie den Service-Host. Der Adapter gibt Daten zurück, wenn die Abfrage ein Resultset zurückgibt.
// Open the service host to begin polling serviceHost.Open();Schließen Sie den Diensthost, um die Abfrage zu beenden.
Von Bedeutung
Der Adapter fragt weiterhin ab, bis der Diensthost geschlossen ist.
serviceHost.Close();
Beispiel
Das folgende Beispiel zeigt eine Abfrage, die auf die Tabelle "Mitarbeiter" zugreift. Die Abfrageanweisung führt die folgenden Aufgaben aus:
Wählt alle Datensätze aus der Tabelle "Mitarbeiter" aus.
Führt die MOVE_EMP_DATA gespeicherten Prozedur aus, um alle Datensätze aus der Tabelle "Mitarbeiter" in die Tabelle "EmployeeHistory" zu verschieben.
Führt die gespeicherte Prozedur ADD_EMP_DETAILS aus, um der Tabelle "Mitarbeiter" einen Datensatz hinzuzufügen.
Die erste Abrufnachricht enthält alle Datensätze aus der Tabelle "Mitarbeiter". Die nachfolgenden Abrufnachrichten enthalten nur den letzten Datensatz, der von der gespeicherten Prozedur ADD_EMP_DETAILS eingefügt wurde. Der Adapter wird weiterhin abfragen, bis Sie den Diensthost durch Drücken von
<RETURN>schließen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Adapters.Sql;
using Microsoft.ServiceModel.Channels;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;
using System.Collections.ObjectModel;
namespace TypedPolling_ServiceModel
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class PollingService : SqlAdapterBindingNamespace.SqlAdapterBindingService
{
public override void TypedPolling(TypedPolling request)
{
Console.WriteLine("\nNew Polling Records Received");
Console.WriteLine("*************************************************");
Console.WriteLine("Employee ID\tName\tDesignation\tSalary");
for (int i = 0; i < request.TypedPollingResultSet0.Length; i++)
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}",
request.TypedPollingResultSet0[i].Employee_ID,
request.TypedPollingResultSet0[i].Name,
request.TypedPollingResultSet0[i].Designation,
request.TypedPollingResultSet0[i].Salary);
}
Console.WriteLine("*************************************************");
Console.WriteLine("\nHit <RETURN> to stop polling");
}
}
class PollingCredentials : ClientCredentials, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
bindingParameters.Add(this);
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{ }
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{ }
protected override ClientCredentials CloneCore()
{
ClientCredentials clone = new PollingCredentials();
clone.UserName.UserName = this.UserName.UserName;
clone.UserName.Password = this.UserName.Password;
return clone;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost serviceHost = null;
try
{
Console.WriteLine("Sample started...");
Console.WriteLine("Press any key to start polling...");
Console.ReadLine();
SqlAdapterBinding binding = new SqlAdapterBinding();
binding.InboundOperationType = InboundOperation.TypedPolling;
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM EMPLOYEE";
binding.PollingStatement = "SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000";
Console.WriteLine("Binding properties assigned...");
// This URI is used to specify the address for the ServiceEndpoint
// It must contain the InboundId that was used to generate
// the WCF service callback interface
Uri ConnectionUri = new Uri("mssql://mysqlserver//mydatabase?InboundId=Employee");
// This URI is used to initialize the ServiceHost. It cannot contain
// the InboundID; otherwise,an exception is thrown when
// the ServiceHost is initialized.
Uri[] baseUri = new Uri[] { new Uri("mssql://mysqlserver//mydatabase") };
PollingCredentials credentials = new PollingCredentials();
credentials.UserName.UserName = "<Enter user name here>";
credentials.UserName.Password = "<Enter password here>";
Console.WriteLine("Opening service host...");
PollingService service = new PollingService();
serviceHost = new ServiceHost(service, baseUri);
serviceHost.Description.Behaviors.Add(credentials);
serviceHost.AddServiceEndpoint("TypedPolling_Employee", binding, ConnectionUri);
serviceHost.Open();
Console.WriteLine("Service host opened...");
Console.WriteLine("Polling started...");
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("Exception :" + e.Message);
Console.ReadLine();
/* If there is an error it will be specified in the inner exception */
if (e.InnerException != null)
{
Console.WriteLine("InnerException: " + e.InnerException.Message);
Console.ReadLine();
}
}
finally
{
// IMPORTANT: you must close the ServiceHost to stop polling
if (serviceHost.State == CommunicationState.Opened)
serviceHost.Close();
else
serviceHost.Abort();
}
}
}
}
Siehe auch
Abrufen von SQL Server mithilfe des SQL-Adapters mit WCF-Dienstmodell