Formanwendung mir Zugriff auf Websservice IFD Problem
-
2012年5月14日 上午 08:15
Hallo an alle hier im Forum,
ich programmiere mir gerade eine Formanwendung mit der man per Webservice auf die Daten im CRM von außen zugreifen kann ohne im CRM eingeloggt zu sein.
Leider funktioniert das ganze nicht so ganz und ich bekomme in VS2010 die Fehlermeldung authentication failed. Ich habe mal folgendes getestet, wenn ich über den LiveID account auf eine MS CRM Demo zugreife z.B. richard.....@gmx.de funktinert das ganze auch gut und eine Verbindung ist möglich!
Da bei uns aber das IFD ( Internet Faceing Depyloment ) angewendet wird, scheint das Programm diese authentifikation nicht zu verarbeiten.
Hat jemande eine Idee oder Erfahrungen im Umgang mit dem Zugriff auf IFD CRM Server ?
所有回覆
-
2012年5月14日 上午 08:36
Hallo!
Du musst in der Formanwendung bei IFD über das Formular Benutzername, Passwort und Domain vom Benutzer abfragen und den CRM-Webservice statt mit DefaultCredentials mit NetworkCredentials initialisieren.
Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de
- 已提議為解答 Andreas Buchinger 2012年5月14日 上午 09:21
-
2012年5月14日 下午 03:51
Hallo Andreas,
Danke,werde den Ansatz ausprobieren und versuchen zu implementieren.
-
2012年5月23日 下午 12:34
OK die Formanwendung hat bereits Eingabefelder für Benuztername,Pass... die Daten werden auch richtig abgefragt.
Du sagst das ich nicht die DefaultCredentials nehmen soll,sondern die NetworkCredentials? Hast du ein Beispiel vielleicht!
Bin total verzeweifelt nix funktioniert! Dieser Code macht es auch nicht :Hier eine einfache Konsolenanwendung :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Discovery;
namespace MS_CRM_Connection_Final
{
class Program
{
static void Main(string[] args)
{
// Connection Data
string crmServer = "test.cmr.de"; // nur Beispiele
string crmUser = "test";
string crmPassword = "test";
string crmDomain = "testing";
// Create Credentials
ClientCredentials credentials = new ClientCredentials();
credentials.Windows.ClientCredential =
new System.Net.NetworkCredential(crmUser, crmPassword, crmDomain);
// Retrieve Organization Data
Uri discoveryServiceUrl = new Uri("https://" + crmServer + "/XRMServices/2011/Discovery.svc");
DiscoveryServiceProxy crmService =
new DiscoveryServiceProxy(discoveryServiceUrl, null, credentials, credentials);
RetrieveOrganizationsRequest request = new RetrieveOrganizationsRequest();
RetrieveOrganizationsResponse response = (RetrieveOrganizationsResponse)crmService.Execute(request);//Hier der Fehler
// Output first Organization
if (response.Details.Count > 0)
{
OrganizationDetail org = response.Details[0];
Console.WriteLine("WebApplication: " + org.Endpoints[EndpointType.WebApplication]);
Console.WriteLine("OrganizationService: " + org.Endpoints[EndpointType.OrganizationService]);
Console.WriteLine("OrganizationDataService: " + org.Endpoints[EndpointType.OrganizationDataService]);
Console.WriteLine("FriendlyName: " + org.FriendlyName);
Console.WriteLine("UniqueName: " + org.UniqueName);
Console.WriteLine("UrlName: " + org.UrlName);
Console.WriteLine("State: " + org.State.ToString());
Console.WriteLine("OrganizationVersion: " + org.OrganizationVersion);
Console.WriteLine("OrganizationId: " + org.OrganizationId.ToString());
}
Console.WriteLine("Press <Enter> to exit.");
Console.ReadLine();
}
}
}Er sagt wieder authentication failed wieso?
-
2012年5月23日 下午 01:53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Xrm.Sdk;
using Microsoft.Crm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using System.ServiceModel.Description;
public partial class _Default : System.Web.UI.Page
{
OrganizationServiceProxy orgService;
protected void Page_Load(object sender, EventArgs e)
{
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "test@test.com";
credentials.UserName.Password = "youpassword";
ClientCredentials deviceCredentials = new ClientCredentials();
deviceCredentials.UserName.UserName = "11ci6bmxtr43mgy274d5n0jx1c";
deviceCredentials.UserName.Password = "w!L0?(u6n!s~=kAblp5oZnGH";
Uri organizationUri = new Uri("https://testorg.api.crm.dynamics.com/XRMServices/2011/Organization.svc");
Uri homeRealmUri = null;
orgService = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, deviceCredentials);
}
protected void Button1_Click(object sender, EventArgs e)
{
Entity lead = new Entity("lead");
lead["subject"] = topic.Text;
lead["firstname"] = firstName.Text;
lead["lastname"] = lastName.Text;
lead["companyname"] = companyName.Text;
orgService.Create(lead);
}
}
Carsten Groth http://carstengroth.wordpress.com Microsoft Dynamics Certified Technology Specialist
- 已編輯 Carsten Groth _MSCRM_ 2012年5月23日 下午 01:55
- 已提議為解答 Andreas Buchinger 2012年6月5日 下午 01:38
-
2012年5月23日 下午 02:25
class Program
{
static void Main(string[] args)
{
// Anlegen.... der URL hier wird nicht über den DiscoverySerice gegangen,sondern eine direkte Ansprache des Servers wird durchgeführt.
Uri organizationUriIFD = new Uri("https://test.the-company.de/XRMServices/2011/Organization.svc");
// Hier werden die Credentials,also die notwendigen Daten Daten angelegt die zum Einloggen notwenidg sind und gebraucht werden
ClientCredentials credentials = new ClientCredentials();
// Anlegen des UserNamen und weiterer Informationen
credentials.UserName.UserName = "test";
// Angeben des Passworts
credentials.UserName.Password = "test";
// Instanzieren einer ServiceConfiguration
IServiceConfiguration<IOrganizationService> config = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(organizationUriIFD);
// Anlegen einer Service Proxy!
using (Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(config, credentials))
{
// This statement is required to enable early-bound type support.
_serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
// Anlegen eines neuen Service und anschließender Proxy
IOrganizationService _service = (IOrganizationService)_serviceProxy;
// durchführen eins WhoIamReuest
WhoAmIResponse response = (WhoAmIResponse)_service.Execute(new WhoAmIRequest());
// Ausgeben der Daten
Console.WriteLine(response.UserId.ToString());
Console.ReadLine();
}
// Account retrievedAccount = (Account)_service.Retrieve("account", _accountId, cols);
//Console.Write("Ende");
}
}
}@ Carsten Groth _MSCRM_ : Danke! Werde deinen Code mal testen.Der obere funktioniert auch!
Vielen Dank!
- 已提議為解答 Andreas Buchinger 2012年6月5日 下午 01:38