Hi All,
we have created on webservice that takes the data from lagecy system and create a record in MSCRM account entity.
issue is when I runnning webserice in local host it is working fine and create a record in account enity,
But when I consuming this webservice from other system not able to create record due to
Code:
using System.Web.Services;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Web;
//using System.Net;
//using System.Configuration;
//using System.Web.UI;
//using System.Web.UI.WebControls;
//using Microsoft.Xrm.Sdk;
//using Microsoft.Xrm.Sdk.Messages;
//using Microsoft.Xrm.Sdk.Query;
//using Microsoft.Xrm.Sdk.Client;
//using Microsoft.Crm.Sdk.Messages;
//using Microsoft.Xrm.Sdk.Metadata;
//using System.ServiceModel.Description;
//using System.Security;
//using System.Security.Cryptography;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
//using Microsoft.Xrm.Sdk.DeviceCredential;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Discovery;
using Microsoft.Xrm.Sdk.Messages;
using System.Security.Principal;
using System.Xml;
using System.Runtime.InteropServices;
using Microsoft.Xrm.Sdk;
using System.Security.Cryptography;
using System.Xml.Serialization;
using Microsoft.Crm.Services.Utility;
using System.IO;
using McTools.Xrm.Connection;
using log4net;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using Microsoft.Xrm.Client.Services;
/// <summary>
/// Summary description for CRMWebService
/// </summary>
[WebService(Namespace = "http://WebSite2/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
public WebService()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}
public void writeToText(string text)
{
string path = @"D:\logs\log.txt";
if (!File.Exists(path))
{
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine(text + "--" + DateTime.Now);
tw.Close();
}
else if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path, true);
tw.WriteLine(text +"--" + DateTime.Now);
tw.Close();
}
}
//public string HelloWorld()
//{
// return "Hello World";
//}
public class CreditInfo
{
private string customername;
private string customernumber_1;
private string customercreditlimit;
private string totalreceivables;
private string opendeliverycreditval;
private string openbillingdocumentcredit;
private string opensaleordercreditvalue;
public string CustomerNumber1
{
get { return customernumber_1; }
set { customernumber_1 = value; }
}
public string CustomerCreditLimit
{
get { return customercreditlimit; }
set { customercreditlimit = value; }
}
public string CustomerName
{
get { return customername; }
set { customername = value; }
}
//public string OpenDeliveryCreditValue
//{
// get { return opendeliverycreditval; }
// set { opendeliverycreditval = value; }
//}
//public string OpenBillingDocumentCredit
//{
// get { return openbillingdocumentcredit; }
// set { openbillingdocumentcredit = value; }
//}
//public string OpenSaleOrderCreditValue
//{
// get { return opensaleordercreditvalue; }
// set { opensaleordercreditvalue = value; }
//}
}
[WebMethod]
[XmlInclude(typeof(CreditInfo))]
public List<CreditInfo> GetCreditInfoData(List<CreditInfo> Creditvalues)
{
//log.Debug("Application loaded successfully.");
writeToText("Application loaded successfully.");
CreditInfo CreditInfoVal = new CreditInfo();
List<CreditInfo> objCreditinfo = new List<CreditInfo>();
foreach (var c in Creditvalues)
{
//CreditInfoVal.CustomerNumber1 = c.CustomerNumber1;
//CreditInfoVal.CustomerCreditLimit = c.CustomerCreditLimit;
CreditInfoVal.CustomerName = c.CustomerName;
CreditInfoVal.CustomerNumber1 = c.CustomerNumber1;
CreditInfoVal.CustomerCreditLimit = c.CustomerCreditLimit;
//CreditInfoVal.CustomerName = c.CustomerName;
//CreditInfoVal.TotalReceivables = c.TotalReceivables;
//CreditInfoVal.OpenDeliveryCreditValue = c.OpenDeliveryCreditValue;
//CreditInfoVal.OpenBillingDocumentCredit = c.OpenBillingDocumentCredit;
//CreditInfoVal.OpenSaleOrderCreditValue = c.OpenSaleOrderCreditValue;
objCreditinfo.Add(CreditInfoVal);
}
return objCreditinfo;
}
[WebMethod]
[XmlInclude(typeof(CreditInfo))]
public void PushCreditData(List<CreditInfo> Creditvalues)
{
log.Debug("Application loaded successfully.");
log.Info("Entered to PushCreditData");
writeToText("********************************************");
writeToText("Entered Push Credit data method.");
try
{
CreditInfo CreditInfoVal = new CreditInfo();
List<CreditInfo> objCreditinfo = new List<CreditInfo>();
foreach (var c in Creditvalues)
{
//CreditInfoVal.CustomerNumber1 = "c.CustomerNumber1";
//CreditInfoVal.CustomerCreditLimit = "c.CustomerCreditLimit";
//CreditInfoVal.CustomerName = "c.CustomerName";
//CreditInfoVal.CustomerNumber1 = c.CustomerNumber1;
//writeToText("Customer Number :" + CreditInfoVal.CustomerNumber1);
//CreditInfoVal.CustomerCreditLimit = c.CustomerCreditLimit;
//writeToText("Creditlimit :" + CreditInfoVal.CustomerCreditLimit);
CreditInfoVal.CustomerName = c.CustomerName;
writeToText("Customer Name :" + CreditInfoVal.CustomerName);
//CreditInfoVal.TotalReceivables = c.TotalReceivables;
//CreditInfoVal.OpenDeliveryCreditValue = c.OpenDeliveryCreditValue;
//CreditInfoVal.OpenBillingDocumentCredit = c.OpenBillingDocumentCredit;
//CreditInfoVal.OpenSaleOrderCreditValue = c.OpenSaleOrderCreditValue;
objCreditinfo.Add(CreditInfoVal);
}
CreateAccount(objCreditinfo);
//SaveData(objCreditinfo);
}
catch(Exception ex)
{
log.Error("Push Credit Data : " + ex.Message);
writeToText("Exception in PushCreditDatamethod :" +ex.Message);
}
}
[WebMethod]
[XmlInclude(typeof(CreditInfo))]
public void TestMethodPushCreditData()
{
writeToText("Entered TestMethod");
//log.Debug("Application loaded successfully.");
//log.Info("Entered to TestPushCreditData");
CreditInfo CreditInfoVal = new CreditInfo();
List<CreditInfo> objCreditinfo = new List<CreditInfo>();
//CreditInfoVal.CustomerNumber1 = "2345";
//CreditInfoVal.CustomerCreditLimit = "20000000";
CreditInfoVal.CustomerName = "TestAccount";
//CreditInfoVal.TotalReceivables = "xyz";
//CreditInfoVal.OpenDeliveryCreditValue = "xyz";
//CreditInfoVal.OpenBillingDocumentCredit = "xyz";
//CreditInfoVal.OpenSaleOrderCreditValue = "xyz";
objCreditinfo.Add(CreditInfoVal);
PushCreditData(objCreditinfo);
}
private void SaveData(List<CreditInfo> CreditData)
{
try
{
string path = System.Configuration.ConfigurationManager.AppSettings["Path"].ToString();
string FileName = path + "CInfo_" + DateTime.Now.ToString("MMddyyyhhmm") + ".xml";
using (TextWriter writer = new StreamWriter(FileName))
{
(new XmlSerializer(typeof(List<CreditInfo>))).Serialize(writer, CreditData);
}
}
catch (Exception ex)
{
log.Error("error : " + ex.Message);
}
}
public string CreateAccount(List<CreditInfo> CreditData)
{
OrganizationService Iservice;
writeToText("****************************************************************");
writeToText("Entered MSCRM CreatAccount Method");
log.Info("Entered to CreateAccount");
string message = string.Empty;
try
{
//ConnectionManager connectionManager = new ConnectionManager(@"C:\Users\raghup\Documents\Visual Studio 2010\WebSites\WebSite2\Bin\mscrmtools2011.config");
//Iservice = connectionManager.ConnectToServer(connectionManager.ConnectionsList.Connections[0]) as OrganizationService;
var deviceCred = new System.ServiceModel.Description.ClientCredentials();
var cred = new System.ServiceModel.Description.ClientCredentials();
cred.UserName.UserName = "WindowsLivedID";
cred.UserName.Password = "Password";
cred.Windows.ClientCredential = new System.Net.NetworkCredential("WindowsLivedID", "Password");
// Uri HomeRealmUri = new Uri(String.Format("https://disco.crm4.dynamics.com/XRMServices/2011/Discovery.svc","crm4.dynamics.com"));
//ServerConnection obj = new ServerConnection();
// deviceCred = (System.ServiceModel.Description.ClientCredentials)obj.GetDeviceCredentials();
OrganizationServiceProxy orgService = (OrganizationServiceProxy)GetCRMService("https://zuaricement-test.api.crm4.dynamics.com/XRMServices/2011/Organization.svc",
cred, deviceCred);
// writeToText("OrgService Object Created");
//orgService.EnableProxyTypes();
Entity Account = new Entity("account");
//Specify the attributes
// contact.Attributes["lastname"] = "Raghu";
//ITracingService tracingService =
// (ITracingService)serviceProvider.GetService(typeof(ITracingService));
//Execute the service
foreach (CreditInfo item in CreditData)
{
try
{
//Entity entity = GetAccountBasedOnCustomerNumber(service, item.CustomerNumber1);
if (CreditData.Count > 0)
{
//if (item.CustomerCreditLimit != null)
// Account.Attributes.Add("new_creditlimitamount", new Money(Convert.ToDecimal(item.CustomerCreditLimit)));
//writeToText("CreditLimit :" + item.CustomerCreditLimit + " assigned");
//if (item.CustomerNumber1 != null)
// Account.Attributes.Add("accountnumber", new String (Convert.ToDecimal(item.CustomerNumber1)));
//if (item.CustomerNumber1 != null)
// Account.Attributes.Add("accountnumber", item.CustomerNumber1);
//writeToText("Customer Number :" + item.CustomerNumber1 + " assigned");
if (item.CustomerName != null)
Account.Attributes.Add("name", item.CustomerName);
writeToText("Customer Name :" + item.CustomerName + " assigned");
//if (item.OpenBillingDocumentCredit != null)
// Account.Attributes.Add("new_creditlimitamount", new Money(Convert.ToDecimal(item.OpenBillingDocumentCredit)));
//if (item.OpenDeliveryCreditValue != null)
// Account.Attributes.Add("new_creditlimitamount", new Money(Convert.ToDecimal(item.OpenDeliveryCreditValue)));
//if (item.OpenSaleOrderCreditValue != null)
// Account.Attributes.Add("new_creditlimitamount", new Money(Convert.ToDecimal(item.OpenSaleOrderCreditValue)));
//if (item.TotalReceivables != null)
// Account.Attributes.Add("new_creditlimitamount", new Money(Convert.ToDecimal(item.TotalReceivables)));
// return "error";
//Guid contactId = Iservice.Create(Account);
}
// Guid contactId = Iservice.Create(Account);
}
catch (Exception ex)
{
log.Error("Creat Account method exception : " + ex.Message);
writeToText("Exception in Assigning the values :" + ex.Message);
return "error";
}
}
// Account.Attributes[""] = CreditData.
Guid contactId = orgService.Create(Account);
///Guid contactId = orgService.Create(Account);
}
catch (Exception ex)
{
log.Error("Create Account method error: " + ex.Message);
writeToText("Exception in CreateAccountMethod :" + ex.Message);
message = ex.Message;
}
//returns the message
return message;
}
protected virtual ClientCredentials GetCredentials(string username, string password)
{
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = username;
credentials.UserName.Password = password;
return credentials;
}
private static ClientCredentials GetDeviceCredentials()
{
return Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice();
}
private OrganizationServiceProxy GetCRMService(string crmServerUrl, System.ServiceModel.Description.ClientCredentials cred, System.ServiceModel.Description.ClientCredentials deviceCred)
{
try
{
writeToText("reached GetCRMService, before calling OrganizationServiceProxy constructor");
OrganizationServiceProxy _service;
_service = new OrganizationServiceProxy(new Uri(crmServerUrl), null, cred, deviceCred);
_service.Timeout = System.TimeSpan.MaxValue;
writeToText("reached GetCRMService, after calling OrganizationServiceProxy constructor");
return _service;
// writeToText("Exception in CreateAccountMethod :" + _service);
// Uri oUri = new Uri("https://zuaricement-test.api.crm4.dynamics.com/XRMServices/2011/Organization.svc");
// //** Your client credentials
// ClientCredentials clientCredentials = new ClientCredentials();
//
// //Create your Organization Service Proxy
// OrganizationServiceProxy _service = new OrganizationServiceProxy(
// oUri,
// null,
// clientCredentials,
// null);
// System.ServiceModel.Description.ClientCredentials credentials;
// credentials = new ClientCredentials();
// If CRM On-Premise
// To use custom credentials pass user credentials
// To use Default Credentials; Uncomment below line and comment above
// credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
// If CRM Online
// Use “https” if CRM is SSL configured
// string orgUrl= "https://zuaricement-test.api.crm4.dynamics.com/XRMServices/2011/Organization.svc";
// Add this line if URL has “https” (i.e.,CRM is SSL configured)
// if (!string.IsNullOrEmpty(orgUrl) && orgUrl.Contains("https")) {
// ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain,
// SslPolicyErrors sslPolicyErrors) { return true; };
// }
// Uri HomeURI =new Uri(homerealmUri);
// Uri organizationUri = new Uri(orgUrl);
// using (
// OrganizationServiceProxy serviceProxy =
// new OrganizationServiceProxy(organizationUri,null,credentials, null))
// {
// serviceProxy.EnableProxyTypes();
// To impersonate set the GUID of CRM user here
// Guid id;
// id= new Guid("201AE66E-6DD3-E211-8E40-AC162DB64AC6");
// serviceProxy.CallerId = id;
// IOrganizationService service;
// serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
// service = serviceProxy;
// serviceProxy.Timeout = new TimeSpan(0, 6, 0);
// return serviceProxy;
// }
}
catch (FaultException ex)
{
writeToText("fault exception: " + ex.Message);
return null;
}
catch (Exception ex)
{
writeToText("General exception: " + ex.Message);
return null;
}
}
private static readonly ILog log = LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}