После долгих исследований я иду безопасным путем для достижения этой цели.Я собираюсь создать отдельные проекты WCF для каждого арендатора и разместить их в отдельных виртуальных каталогах IIS.например, для Tenant1 - http://localhost/ Tenant1/Service1.svc
и для Tenant2 - http://localhost/Tenant2/Service1.svc
Обратите внимание, что имя SVC одинаково.Затем я удаляю IService1.cs и Service1.svc.cs из Tenant2 и добавляю существующий файл как ссылку из Tenant1.Я должен сделать это для каждого нового арендатора, и поэтому это не чистое решение.Теперь мой обозреватель решений выглядит следующим образом.
Здесь WcfService3 предназначен для Tenant1, а WcfService1 - для Tenant2 (извините за эти запутанные имена. Я могу исправить это, если кому-то понадобится).Поэтому мои свойства WcfService3 выглядят следующим образом.
Теперь и для сервисного кода http://localhost/ Tenant1/Service1.svc
, и для http://localhost/ Tenant2/Service1.svc
в одном месте, которое находится в WcfServices3-> Service1.svc.cs,Следующий код создаст объект соединения с базой данных для конкретного вызова метода.
private static string dbServerName = "YourDBServerName";
private static SqlConnection dbConnection = createDBConnection();
private static SqlConnection createDBConnection()
{
Uri fullUri = OperationContext.Current.IncomingMessageHeaders.To;
Uri baseAddress = new Uri(@"http://localhost");
UriTemplate template = new UriTemplate(@"/{orgName}/Service1.svc");
// retrieve the value of the artist segment
UriTemplateMatch match = template.Match(baseAddress, fullUri);
String orgName = match.BoundVariables["orgName"];
SqlConnection objConnection = new SqlConnection();
objConnection.ConnectionString = createConnString(orgName);
return objConnection;
}
private static string createConnString(string orgName)
{
return (String.Format("Data Source={0};Initial Catalog={1}_MSCRM;User Id=UserId1;Password=PasswordForUserId1;", dbServerName, orgName));
}
Я знаю, что это не реальное решение проблемы (многопользовательские службы WCF), а быстрая, простая и безопасная работа.Надеюсь, это кому-нибудь поможет.Также, если вы видите какие-либо проблемы здесь или знаете лучшее решение, пожалуйста, дайте мне знать.
-Nilesh