C# Web Api项目中的CrmServiceClient重用或连接池

C# Web Api项目中的CrmServiceClient重用或连接池,c#,.net,dynamics-crm-2011,dynamics-crm,C#,.net,Dynamics Crm 2011,Dynamics Crm,我试图了解如何在Web Api项目中使用CRM SDK的CrmServiceClient,并想确认我的理解是否正确 CrmServiceClient实现连接池是真的吗?如果是这样的话,简单地为每个web请求创建一个新实例是否有效,因为CrmServiceClient将减轻创建新连接的开销 或者我应该在整个应用程序中使用单个CrmServiceClient实例吗?我认为这不起作用,因为我的理解是它不是线程安全的,最终连接将关闭(我认为) 上面写着: 线程安全性 此类型的任何公共静态(在Visual

我试图了解如何在Web Api项目中使用CRM SDK的CrmServiceClient,并想确认我的理解是否正确

CrmServiceClient实现连接池是真的吗?如果是这样的话,简单地为每个web请求创建一个新实例是否有效,因为CrmServiceClient将减轻创建新连接的开销

或者我应该在整个应用程序中使用单个CrmServiceClient实例吗?我认为这不起作用,因为我的理解是它不是线程安全的,最终连接将关闭(我认为)

上面写着:

线程安全性
此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证线程安全

(强调我自己)


在我的整个应用程序中,我当然使用了一个CrmServiceClient的静态实例,并且从未遇到过问题。

我发现CrmServiceClient是线程安全的,如这里所述:使用CrmServiceClient类对Dynamics 365的所有调用都是线程安全的

在我正在处理的应用程序中,我缓存了整个应用程序中使用的CrmServiceClient的单个实例。在使用它之前,我检查IsReady属性。这个实例用于在整个应用程序中实例化XrmServiceContext实例(使用块)


此外,在我的测试中,连接池似乎不是由CrmServiceClient执行的。我做了一个测试,调用了100次API端点,每次调用CrmServiceClient的实例化时间基本保持不变。我可能错了,但我认为它不执行连接池。

连接确实是池连接。在整个应用程序中使用单个连接是很常见的,但这取决于您想要完成什么。在连接字符串中添加“RequireReneInstance=True”将在每次使用时创建一个新连接。我通常只在创建需要同时推送更多数据的集成时才这样做。

它说只有公共静态成员是线程安全的。使用CrmServiceClient实例创建XrmServiceContext实例时,是否会导致调用某些非静态实例成员?CrmServiceClient建立的连接是否在一段时间不活动后未关闭或超时?我担心的是,如果我重复使用它,我是否需要检查连接是否仍然打开?它说所有构造函数都是线程安全的:检查连接状态:我相信当初始连接请求成功时IsReady设置为true。在长时间的成功连接后,它不能关闭/超时吗?老实说,我不确定。文档只是说,
IsReady
确定服务是否准备好接受请求,但没有给出具体说明。我不知道该服务是否超时,一旦您创建了连接,它将一直有效,直到关闭/释放。不幸的是,我没有任何文档可以向您展示这一点。我没有RequireRenewalInstance=true,而且它似乎从未汇集连接。有意思,你有什么消息来源吗?