Formanwendung mir Zugriff auf Websservice IFD Problem
-
14 mai 2012 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 ?
Toate mesajele
-
14 mai 2012 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
- Propus ca răspuns de Andreas Buchinger 14 mai 2012 09:21
-
14 mai 2012 15:51
Hallo Andreas,
Danke,werde den Ansatz ausprobieren und versuchen zu implementieren.
-
23 mai 2012 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?
-
23 mai 2012 13: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
- Editat de Carsten Groth _MSCRM_ 23 mai 2012 13:55
- Propus ca răspuns de Andreas Buchinger 5 iunie 2012 13:38
-
23 mai 2012 14: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!
- Propus ca răspuns de Andreas Buchinger 5 iunie 2012 13:38