Asp.net Dynamics crmservice asmx和缓存
我有一个自定义应用程序,它使用crmservice.asmx从dynamics crm 4检索联系人 问题是:我在自定义应用程序中搜索联系人,但没有找到。我转到MSCRM并创建联系人。当我再次尝试在自定义应用程序中搜索时,仍然找不到联系人 它必须是crmservice.asmx的缓存,因为当我在10分钟后重试时,会在我的自定义应用程序中找到该联系人 但是如何管理crmservice.asmx上的缓存设置 我的实例化代码Asp.net Dynamics crmservice asmx和缓存,asp.net,dynamics-crm,dynamics-crm-4,Asp.net,Dynamics Crm,Dynamics Crm 4,我有一个自定义应用程序,它使用crmservice.asmx从dynamics crm 4检索联系人 问题是:我在自定义应用程序中搜索联系人,但没有找到。我转到MSCRM并创建联系人。当我再次尝试在自定义应用程序中搜索时,仍然找不到联系人 它必须是crmservice.asmx的缓存,因为当我在10分钟后重试时,会在我的自定义应用程序中找到该联系人 但是如何管理crmservice.asmx上的缓存设置 我的实例化代码 Private Const CRMServiceUrl As String
Private Const CRMServiceUrl As String = "https://*****/mscrmservices/2007/crmservice.asmx"
Private Const MetadataServiceUrl As String = "https://*****/MSCRMServices/2007/MetadataService.asmx"
Private Const OrganizationName As String = "****"
Private Const Username As String = "****"
Private Const Password As String = "****"
Private Const Domain As String = "****"
Private ReadOnly _service As CrmService.CrmService
Private ReadOnly _metadataService As MetadataService.MetadataService
Public Sub New()
Dim crmServiceToken As New CrmAuthenticationToken()
crmServiceToken.AuthenticationType = Microsoft.Crm.Sdk.AuthenticationType.AD
crmServiceToken.OrganizationName = OrganizationName
Dim metadataServiceToken As New MetadataService.CrmAuthenticationToken()
metadataServiceToken.AuthenticationType = Microsoft.Crm.Sdk.AuthenticationType.AD
metadataServiceToken.OrganizationName = OrganizationName
Dim credentials As ICredentials = New NetworkCredential(Username, Password, Domain)
_service = New CrmService.CrmService()
_service.Url = CRMServiceUrl
_service.CrmAuthenticationTokenValue = crmServiceToken
_service.Credentials = credentials
_metadataService = New MetadataService.MetadataService()
_metadataService.Url = MetadataServiceUrl
_metadataService.CrmAuthenticationTokenValue = metadataServiceToken
_metadataService.Credentials = credentials
End Sub
以及获取联系人的方法
Public Function GetContact(ByVal request As GetContactRequest) As contact Implements ICRM.GetContact
Dim query As New QueryExpression()
query.EntityName = EntityName.contact.ToString()
query.ColumnSet = New AllColumns()
Dim condition As ConditionExpression
Dim expr As New List(Of ConditionExpression)
condition = New ConditionExpression()
condition.AttributeName = "statecode"
condition.[Operator] = ConditionOperator.Equal
condition.Values = New Object() {0}
expr.Add(condition)
If request.ContactId <> Guid.Empty Then
condition = New ConditionExpression()
condition.AttributeName = "contactid"
condition.[Operator] = ConditionOperator.Equal
condition.Values = New String() {request.ContactId.ToString}
expr.Add(condition)
End If
If Not String.IsNullOrEmpty(request.CustomerCode) Then
condition = New ConditionExpression()
condition.AttributeName = "new_orgcustomerno"
condition.[Operator] = ConditionOperator.Like
condition.Values = New String() {request.CustomerCode + "%"}
expr.Add(condition)
End If
If Not String.IsNullOrEmpty(request.ContactSeq) Then
condition = New ConditionExpression()
condition.AttributeName = "new_contact_seq"
condition.[Operator] = ConditionOperator.Like
condition.Values = New String() {request.ContactSeq + "%"}
expr.Add(condition)
End If
Dim filter As New FilterExpression()
filter.FilterOperator = LogicalOperator.[And]
filter.Conditions = expr.ToArray
query.Criteria = filter
Dim contacts As BusinessEntityCollection = _service.RetrieveMultiple(query)
If contacts.BusinessEntities.Length > 0 Then
Dim a As contact = DirectCast(contacts.BusinessEntities(0), contact)
Return a
Else
Return Nothing
End If
End Function
这只是一个建议,但我不认为它和缓存有什么关系。可能的问题是权限问题或条件问题。我的意思是,如果您在作为某个用户登录CRM时创建了联系人,但试图在其他CRM用户下检索以前创建的联系人。或者可能是您添加到条件列表中的其他列,可能其中的一些列没有您认为存在的值。已解决:通过使用Retrieve而不是RetrieveMultiple,我可以立即获得联系人
这意味着通过其他列搜索新创建的联系人,我无法立即访问它,必须等待几分钟。我必须使用contactid。我想我们需要查看您的代码。对我来说,这听起来不像是预期的行为。执行CRM呼叫的用户是否与创建联系人的用户相同?不是的,你能试着打那个电话作为测试吗。如果只设置contactid并将ContactSeq保留为Null或空,是否存在此问题?我想知道这是否与索引该字段上的like比较运算符有关。谢谢@ThinkPlusPlus,我将在一天结束时检查这一点,并尝试获取具有精确值且没有like比较的联系人。