Fragensteller
WCF DataService mit EF 6.1.3 datenbank zur Laufzeit wechseln

Allgemeine Diskussion
-
Hallo Leute,
ich möchte zur Laufzeit mit dem Dataservice auf die dem Benutzer zugeordnete Datenbank zugreifen. Die Datenbank steht verschlüsselt im Header.
In verschiedenen Tutorals habe ich gelesen das ich die CreateDatasource function überschreiben muss, ich habe schon alles mögliche versucht aber ich bekomme es einfach nicht hin...
Hier der Connectionstring aus der Webconfig bei dem ich den Initial Catalogue ändern möchte:
<add name="InsikaEntities" connectionString="metadata=res://*/ODataService.insikaEntities.csdl|res://*/ODataService.insikaEntities.ssdl|res://*/ODataService.insikaEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=DESKTOP-CUTLU62\MSSQLEXPRESS2014;initial catalog=Insika;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
und Hier mein Dataservice:
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Data.Services Imports System.Data.Services.Common Imports System.Data.Services.Providers Imports System.Linq Imports System.ServiceModel.Web Imports System.Web Imports taxidaten.TWDataService Imports Microsoft.AspNet.Identity.Owin Imports System.Net Imports System.Net.Http Imports System.Web.Http Imports Microsoft.AspNet.Identity Imports System.Data.EntityClient #If DEBUG Then <System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults:=True)> _ <TWDataService.JSONPSupportBehavior> _ Public Class DataService #Else <TWDataService.JSONPSupportBehavior> _ Public Class DataService #End If Inherits EntityFrameworkDataService(Of InsikaEntities) Implements IServiceProvider ' This method is called only once to initialize service-wide policies. Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration) ' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc. ' Examples: ' config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead) ' config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All) config.SetEntitySetAccessRule("*", EntitySetRights.AllRead) config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3 #If DEBUG Then config.UseVerboseErrors = True #End If End Sub Public Function GetService(ByVal serviceType As Type) As Object Implements IServiceProvider.GetService If serviceType Is GetType(IDataServiceStreamProvider) Then ' Return the stream provider to the data service. Return New TWDataService.ImageStreamProvider() End If Return Nothing End Function Protected Overrides Sub OnStartProcessingRequest(ByVal args As ProcessRequestArgs) Dim result = Utilitys.ValidateToken(HttpContext.Current.Request.Headers("Token")) If result = False Then Throw New DataServiceException(400, "Invalid login or password") End If MyBase.OnStartProcessingRequest(args) End Sub Protected Overrides Function CreateDataSource() As InsikaEntities End Function End Class
bitte helft mir mit einem netten codesample ich bin fast am durchdrehen weil ich das Gefühl habe, dass ich mich einfach nur zu dämlich anstelle...
- Typ geändert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 27. Mai 2016 13:40 Warten auf Rückmeldung
Alle Antworten
-
Hallo Marco Kosch,
Nachfolgend ein Beispiel, wie Du die Verbindungszeichenfolge aus den App-Einstellungen auslesen kannst: Store Connection String in Web.config
Dann kannst Du die Variable im Code ändern, indem Du den Anfangskatalog durch einen anderen ersetzt:
string vzf = ConfigurationManager.ConnectionStrings["InsikaEntities"].connectionString; //Verbindungszeichenfolge auslesen int i = vzf.IndexOf("initial catalog"); string Datenbankname = vzf.Substring(i+16, vzf.IndexOf(';', i+16) - i - 16); string vzf2 = vzf.Replace(Datenbankname, "Datenbank2");
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.