在 Dynamics CRM 2013 的控制台应用程序中创建 IOrganizationServiceFactory
Create IOrganizationServiceFactory in Console Application for Dynamics CRM 2013
我正在尝试创建 IOrganizationServiceFactory
的实例,因为我想创建多个线程来连接到服务端点。要创建多个线程安全的服务上下文,您可以使用工厂。但是我似乎无法创建一个。
这在 C# 控制台应用程序中是否可行,还是仅限于插件和工作流?
我可以创建一个 OrganizationServiceProxy
,但是我不知道如何从这里开始。
这是我目前拥有的代码:
var serverName = (string)ConfigurationManager.AppSettings["OrganisationUrl"];
Uri organisationUri = new Uri(string.Format("{0}/XRMServices/2011/Organization.svc", serverName));
Uri homeRealmUri = null;
ClientCredentials credentials = new ClientCredentials();
credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var serviceProxy = new OrganizationServiceProxy(organisationUri, homeRealmUri, credentials, null);
你可以设计一个class实现接口IOrganizationServiceFactory
。这个 class 可以负责创建和发布 IOrganizationService
个实例。
我做了一个基本的例子:
class OrganizationServiceFactory: IOrganizationServiceFactory, IDisposable
{
private readonly ConcurrentBag<OrganizationServiceProxy> _issuedProxies =
new ConcurrentBag<OrganizationServiceProxy>();
public IOrganizationService CreateOrganizationService(Guid? userId)
{
var serverName = (string)ConfigurationManager.AppSettings["OrganisationUrl"];
Uri organisationUri = new Uri(string.Format("{0}/XRMServices/2011/Organization.svc", serverName));
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var serviceProxy = new OrganizationServiceProxy(organisationUri, null, credentials, null);
_issuedProxies.Add(serviceProxy);
return serviceProxy;
}
public void Dispose()
{
foreach (var serviceProxy in _issuedProxies)
{
serviceProxy.Dispose();
}
}
}
工厂的客户可以通过调用CreateOrganizationService(Guid? userId)
获得IOrganizationService
个实例,但不能负责代理的处置。工厂会为他们做的。
B.t.w,您可以使用 IServiceManagement<IOrganizationService>
界面更有效地创建多个代理实例,但这是另一个话题。
您可能会发现 MSDN 上的这篇文章很有用:Optimize CRM 2011 Service Channel allocation for multi-threaded processes。
我正在尝试创建 IOrganizationServiceFactory
的实例,因为我想创建多个线程来连接到服务端点。要创建多个线程安全的服务上下文,您可以使用工厂。但是我似乎无法创建一个。
这在 C# 控制台应用程序中是否可行,还是仅限于插件和工作流?
我可以创建一个 OrganizationServiceProxy
,但是我不知道如何从这里开始。
这是我目前拥有的代码:
var serverName = (string)ConfigurationManager.AppSettings["OrganisationUrl"];
Uri organisationUri = new Uri(string.Format("{0}/XRMServices/2011/Organization.svc", serverName));
Uri homeRealmUri = null;
ClientCredentials credentials = new ClientCredentials();
credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var serviceProxy = new OrganizationServiceProxy(organisationUri, homeRealmUri, credentials, null);
你可以设计一个class实现接口IOrganizationServiceFactory
。这个 class 可以负责创建和发布 IOrganizationService
个实例。
我做了一个基本的例子:
class OrganizationServiceFactory: IOrganizationServiceFactory, IDisposable
{
private readonly ConcurrentBag<OrganizationServiceProxy> _issuedProxies =
new ConcurrentBag<OrganizationServiceProxy>();
public IOrganizationService CreateOrganizationService(Guid? userId)
{
var serverName = (string)ConfigurationManager.AppSettings["OrganisationUrl"];
Uri organisationUri = new Uri(string.Format("{0}/XRMServices/2011/Organization.svc", serverName));
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var serviceProxy = new OrganizationServiceProxy(organisationUri, null, credentials, null);
_issuedProxies.Add(serviceProxy);
return serviceProxy;
}
public void Dispose()
{
foreach (var serviceProxy in _issuedProxies)
{
serviceProxy.Dispose();
}
}
}
工厂的客户可以通过调用CreateOrganizationService(Guid? userId)
获得IOrganizationService
个实例,但不能负责代理的处置。工厂会为他们做的。
B.t.w,您可以使用 IServiceManagement<IOrganizationService>
界面更有效地创建多个代理实例,但这是另一个话题。
您可能会发现 MSDN 上的这篇文章很有用:Optimize CRM 2011 Service Channel allocation for multi-threaded processes。