在Dynamics CRM中未授权
我试图从CRM 4.0中检索联系人列表,但我在验证过程中遇到问题。从我读过的东西,列出所有clinets的方法是解析从ExportAllXmlRequest在Dynamics CRM中未授权
返回的XML的问题是,当我浏览到http://crmserver/MSCRMServices/2007/spla/CRMDiscoveryService.asmx,我得到一个401.2未经授权,没有及时进行身份验证。如果我通过Visual Studio添加Web引用,我会得到一个不接受我的凭证的密码提示。我也尝试过使用以下代码进行身份验证,但都没有成功。 Windows身份验证和匿名身份验证都在服务器上启用。
CrmService svc = new CrmService();
// this doesn't work
svc.UseDefaultCredentials = true;
// this doesn't work either
svc.Credentials = new NetworkCredential("myuser", "password", "mydomain");
svc.Credentials= System.Net.CredentialCache.DefaultCredentials;
ExportAllXmlRequest request = new ExportAllXmlRequest();
ExportAllXmlResponse response = (ExportAllXmlResponse)svc.Execute(request);
string resp=string.Empty;
using (StreamReader reader = new StreamReader(response.ExportXml)) {
resp = reader.ReadToEnd();
}
return resp;
有1)一种更容易的清单CRM接触的方法; 2)这是我能做的来解决这个身份验证问题。
这绝对不是您需要检索实体记录的方式。 ExportAllXmlRequest将为您的CRM环境提取自定义信息,但不会有实际记录。您需要RetrieveMultipleRequest(sdk链接:http://msdn.microsoft.com/en-us/library/bb929303.aspx)。
至于身份验证问题,是您的CRM网站在您的IE列表中的信任或Intranet网站?
您的代码不正确。您正在混合Metadata Service和CRM Service。
对于与CRM数据交互,您应该使用CRM Service。 Discovery Service就像CRM部署的黄页。
// Set up the CRM Service.
var token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "{yourorgname}";
var service = new CrmService();
service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
这创建了与CRM服务的连接。 要检索数据,您可以使用CrmService的RetrieveMultiple
方法。
// Create the QueryExpression object.
var query = new QueryExpression();
// Set the properties of the QueryExpression object.
query.EntityName = EntityName.contact.ToString();
query.ColumnSet = new AllColumns();
// Retrieve the contacts.
BusinessEntityCollection contacts = service.RetrieveMultiple(query);
如果您正在插件或CRM Online版本中使用基础SQL数据库,ckeller的回答很好。如果这是在内部部署安装中,并且您有SQL服务器访问CRM表的权限,则通常更快,更直接地查询SQL表或视图以直接读取实体信息。您只需执行以下SQL查询并使用SQL数据读取器或数据表读出结果 -
SELECT * FROM OrgName_MSCRM.dbo.FilteredContact
我的设置被设置为低安全性,但将该网站添加到可信列表似乎没有影响。 – Echilon 2011-05-07 10:06:43