Asp.net Dynamics 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

我有一个自定义应用程序,它使用crmservice.asmx从dynamics crm 4检索联系人

问题是:我在自定义应用程序中搜索联系人,但没有找到。我转到MSCRM并创建联系人。当我再次尝试在自定义应用程序中搜索时,仍然找不到联系人

它必须是crmservice.asmx的缓存,因为当我在10分钟后重试时,会在我的自定义应用程序中找到该联系人

但是如何管理crmservice.asmx上的缓存设置

我的实例化代码

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比较的联系人。