Calling WCF Service in Plugin in CRM


Suppose this is our simple WCF Service.

[ServiceContract]
   public interface IService1
   {
       [OperationContract]
       string GetData(); 
     
   }

public class Service1 : IService1
   {
       public string GetData()
       {
           return “Hello World”+DateTime.Now.ToLongTimeString();
       }
     
   }

Now if we add its service reference in our plugin and then deploy it, while running we would receive this error.

Could not find default endpoint element that references contract ‘ServiceReference1.IService1’ in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

The reason for this is because the configuration information for the WCF service from the client side is missing. As class library won’t have their own config file.

Suppose if we add service reference to the above Service in a windows application, we can find the following information being added to the app.config file

<?xml version=”1.0″ encoding=”utf-8″ ?>
<configuration>
    <!–<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name=”BasicHttpBinding_IService1″ closeTimeout=”00:01:00″
                    openTimeout=”00:01:00″ receiveTimeout=”00:10:00″ sendTimeout=”00:01:00″
                    allowCookies=”false” bypassProxyOnLocal=”false” hostNameComparisonMode=”StrongWildcard”
                    maxBufferSize=”65536″ maxBufferPoolSize=”524288″ maxReceivedMessageSize=”65536″
                    messageEncoding=”Text” textEncoding=”utf-8″ transferMode=”Buffered”
                    useDefaultWebProxy=”true”>
                    <readerQuotas maxDepth=”32″ maxStringContentLength=”8192″ maxArrayLength=”16384″
                        maxBytesPerRead=”4096″ maxNameTableCharCount=”16384″ />
                    <security mode=”None”>
                        <transport clientCredentialType=”None” proxyCredentialType=”None”
                            realm=”” />
                        <message clientCredentialType=”UserName” algorithmSuite=”Default” />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address=”http://localhost:58844/Service1.svc” binding=”basicHttpBinding”
                bindingConfiguration=”BasicHttpBinding_IService1″ contract=”ServiceReference1.IService1″
                name=”BasicHttpBinding_IService1″ />
        </client>
    </system.serviceModel>–>
</configuration>

So now in case of our plugin we need to define the binding and endpoint information programmatically, something like this

try

{

BasicHttpBinding myBinding = new
BasicHttpBinding();

myBinding.Name = “BasicHttpBinding_IService1”;

myBinding.Security.Mode = BasicHttpSecurityMode.None;

myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;

myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;

myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endPointAddress = new
EndpointAddress(http://localhost:58844/Service1.svc&#8221;);

ServiceReference1.Service1Client myClient = new ServiceReference1.Service1Client(myBinding, endPointAddress);

MessageBox.Show(myClient.GetData());

}

catch (Exception EX)

{

 

throw EX;

}

      
 

This way we would be able to access our WCF service inside plugin.

Hope it helps !

The current identity “domain\username” does not have write access to ‘C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files’.


To reslove this error,

i first tried registering ASP.NET 2.0

1. Open a command prompt.
2. Navigate to ‘C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\’
3. Run this: aspnet_regiis.exe -i

Followed by adding the “domain\username” to the “IIS_IUSRS” group.

This resolved the error.

.NET Framework missing from Visual Studio 2010 new project dialog box


To resolve this issue, download and install .NET Framework 3.5 sp1.

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=en

Or if it is Windows Server 2008 R2,  just enable the .NET Framework 3.5.1 Features using Server Manager or else you will get the following error

“You must use role management tool to install or configure Microsoft .NET Framework 3.5”

Bye.

Using OrganizationServiceClient in CRM 2011


 Add Service Reference to the Organization WCF service in the application.

URL àhttp://servername:port/OrganizationName/xrmServices/2011/organization.svc 

Use the following code to perform various functions using OrganizationServiceClient 


Entity myContact = new Entity();

myContact.LogicalName = “contact”; 

AttributeCollection myAttColl = new AttributeCollection();

myAttColl.Add(new KeyValuePair<string, object>(“lastname”, “Rana”));

myContact.Attributes = myAttColl;
ClientCredentials credentials = new ClientCredentials();

Uri organizationUri = new Uri(http://servername:port/organizationname/xrmServices/2011/organization.svc&#8221;);

try
{
OrganizationServiceClient orgClient = new OrganizationServiceClient();
 

orgClient.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential(“username”, “password”, “domain”); 

orgClient.Create(myContact);

}
catch (Exception ex)
{

throw ex;

} 

Hope it helps.

Using JavaScript to consume a WCF service


Suppose this is our simple WCF service which takes the name as input and returns the resulting string with Hello appended to it.

namespace HelloWorldWCFService{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(string name);
}
}

namespace HelloWorldWCFService{
public class Service1 : IService1 {
public string GetData(string name) {
return “Hello “ + name;

}}}
It uses BasicHttpBinding.

Now this would be our JavaScript function which can consume the above WCF service.

function MyRequest() {var xmlhttp = new XMLHttpRequest();

xmlhttp.open(‘POST’, http://localhost:64833/Service1.svc&#8217;, false);xmlhttp.setRequestHeader(‘SOAPAction’, http://tempuri.org/IService1/GetData&#8217;);

xmlhttp.setRequestHeader(‘Content-Type’, ‘text/xml’);
var data = ;

data += ‘<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/”>&#8217;;data += ‘ <s:Body>’;

data += ‘ <GetData xmlns=”http://tempuri.org/”>&#8217;;

data += ‘ <name>Nishant</name>’;

data += ‘ </GetData>’;

data += ‘ </s:Body>’;

data += ‘</s:Envelope>’;xmlhttp.send(data);

alert(“status = “ + xmlhttp.status);alert(“status text = “ + xmlhttp.statusText);

alert(xmlhttp.responseText); 

}

Here for

xmlhttp.setRequestHeader(‘SOAPAction’, http://tempuri.org/IService1/GetData&#8217;); 

We can get the value for SOAPAction from the wsdl of the WCF service. 

Open the http://localhost:64833/Service1.svc?wsdl

Search for soapAction there.

We would find soapAction value there.

<wsdl:operation name=”GetData“>  <soap:operation
soapAction=”http://tempuri.org/IService1/GetData style=”document” />
<wsdl:input>

Hope it helps !

CRM Shortcut in CRM 2011 Dialogs


Hi I was just wondering how we can use CRM Shortcut radio button option that appears in Insert Hyperlink dialog box of Dialogs in CRM 2011.

After searching for it, I found the following post which says that we should ignore that button as it won’t be there in the final release.

http://social.microsoft.com/Forums/en/crm2011beta/thread/d012ae9e-4bc5-4bdb-ae6f-c58da16882dc

Hope it helps !

Nishant Rana's Weblog

Everything related to Microsoft .NET Technology

Skip to content ↓