Я также разместил этот вопрос на MS Forum , где я получил следующий ответ от Пат.
While it is somewhat limited, there is some direction regarding the caching of service connectivity in the SDK:
Performance Best Practises - Caching
The two primary suggestions being to:
1. Cache the IServiceConfiguration class
2. Monitor your WCF security token and refresh it before it expires
Исходя из этого, я приведу следующие классы из примера кода API. Пожалуйста, дайте мне знать, если у кого-то есть отзывы или правильно / неправильно / лучше посоветуйте по этому вопросу.
Что касается управления AppPool, я все еще ищу информацию.
1. ManagedTokenOrganizationServiceProxy
2. AutoRefreshSecurityToken
3. DeviceIdManager
Я добавил следующую строку подключения в web.config
<add name="XrmConnectionString" connectionString="ServiceUri=http://<MACHINE>:<PORTt>/<ORG>/XRMServices/2011/Organization.svc; Domain=<DOMAIN>; Username=<USERNAME>; Password=<PASSWORD>" />
Затем я создал следующий класс для создания соединения.
/// <summary>Provides server connection information.</summary>
public class ServerConnection
{
private static readonly ILog log = LogManager.GetLogger(typeof(ServerConnection));
#region Public methods
/// <summary>
/// Obtains the OrganizationServiceProxy connection for the target organization's
/// Uri and user login credentials from theconfiguration.
/// </summary>
public static OrganizationServiceProxy getServiceProxy() {
ManagedTokenOrganizationServiceProxy serviceProxy = null;
log.Debug("in getServiceProxy");
try {
CrmConnection crmConnection = new CrmConnection("XrmConnectionString");
serviceProxy = new ManagedTokenOrganizationServiceProxy(crmConnection.ServiceUri, crmConnection.ClientCredentials);
log.Debug("ManagedTokenOrganizationServiceProxy created = " + serviceProxy);
serviceProxy.EnableProxyTypes();
} catch (Exception e) {
log.Fatal(e, e);
throw;
}
log.Debug("Returning serviceProxy");
return serviceProxy;
}
#endregion
}
Следующий код MVC использует соединение:
public ActionResult Index() {
XrmVrcServiceContext context = null;
try {
context = new XrmVrcServiceContext(ServerConnection.getServiceProxy());
} catch (Exception e) {
log.Error(e, e);
throw;
}
return View(context.new_XYZEntitySet.ToList());
}