
I have a requirement to create web service to get a records in dynamics crm. And there is a web application that will call this web service to display the records in it. In this case, i created WCF Service project. I have done writing the script for this WCF Service project. Since i haven't had an access to the CRM Server, i couldn't test this WCF Service. And this is the first time i write WCF Service. So i need an advice and correction whether my script is correct or is not.
This is my code:
Service1.svc.cs
namespace WCF_CRM_Multipolar
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
public class Service1 : IService1
{
OrganizationServiceProxy _orgservice;
string userName = "";
string passWord = "";
string Url = "";
private bool InitializeCRMService(string userName, string passWord, string Url)
{
bool isSuccess = false;
Uri organizationUrl = new Uri(Url);
ClientCredentials credit = new ClientCredentials();
credit.UserName.UserName = userName;
credit.UserName.Password = passWord;
_orgservice = new OrganizationServiceProxy(organizationUrl, null, credit, null);
_orgservice.ServiceConfiguration.CurrentServiceEndpoint.EndpointBehaviors.Add(new ProxyTypesBehavior());
if (_orgservice != null)
isSuccess = true;
return isSuccess;
}
public string BudgetBalance(string userlogin)
{
if (InitializeCRMService(userName, passWord, Url))
{
QueryExpression query = new QueryExpression("systemuser");
string[] cols = { "businessunitid", "domainname" };
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("domainname", ConditionOperator.Equal, userlogin);
query.ColumnSet = new ColumnSet(cols);
var userbusinessunit = _orgservice.RetrieveMultiple(query);
Guid buid = (Guid)userbusinessunit[0].Attributes["businessunitid"];
QueryExpression query1 = new QueryExpression("new_budget");
string[] cols1 = { "owningbusinessunit", "new_selfremainbudget"};
query1.Criteria = new FilterExpression();
query1.Criteria.AddCondition("owningbusinessunit", ConditionOperator.Equal, buid);
query1.ColumnSet = new ColumnSet(cols1);
var budgetremaining = _orgservice.RetrieveMultiple(query1);
Decimal remain_budget = budgetremaining[0].GetAttributeValue<decimal>("new_selfremainbudget");
return "Latest budget available: " + remain_budget.ToString();
}
else
{
return "Failed to retrieve budge from crm";
}
}
}
}
IService1.cs
namespace WCF_CRM_Multipolar
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
string BudgetBalance(string userlogin);
// TODO: Add your service operations here
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
}
The idea is when the web application call this web service, the web application fill the parameter (user login) and get the remain_budget as the return value. So they can use remain_budget and display it in web application.
The question:
When i deploy this to IIS. Is the web application can call this web service and get the return value ? If is not, could you tell me where is the error that i made
*This post is locked for comments
I have the same question (0)Hi Fikri,
The deployment of your WCF app and the communication with CRM are independent. You can run the Service1 code as a Console App on your development machine and be able to query CRM without worrying about the WCF aspect. When your CRM logic is all good, then work on tying it into your WCF app.
Hope this helps! I'd appreciate if you'd mark this as Answering your question.
Thanks,
Aiden