title: CrmImpersonator and IFD
body: <p>I have an asp.net page which works fine for internal calls to the services, however when used on an externally facing site I just cannot get it to function at all.</p>
  
  <p>The CRMImpersonator works ok when accessed internally but when using the IFD interface all I get is a message saying</p>
  
  <pre><code>'Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' doesn't exist.
  Parameter name: Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
  
  Exception Details: System.ArgumentException: 'Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' doesn't exist.
  Parameter name: Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  </code></pre>
  
  <p>Any ideas would be greatly appreciated my code is as below</p>
  
  <pre><code>public string orgname;
  public string crmurl;
  public string metaurl;
  public bool offline;
  
  protected void Page_Load(object sender, EventArgs e)
  {
      #region CRM URLs and Organization Name
  
      //Determine Offline State from Host Name
      if (Request.Url.Host.ToString() == "127.0.0.1")
      {
          #region offline
          offline = true;
  
          //Retrieve the Port and OrgName from the Registry
          //RegistryKey regkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\MSCRMClient");
          //orgname = regkey.GetValue("ClientAuthOrganizationName").ToString();
          string portnumber = regkey.GetValue("CassiniPort").ToString();
  
          //Construct the URLs
          string baseurl = "http://localhost:" + portnumber + "/mscrmservices/2007/";
          crmurl = baseurl + "crmservice.asmx";
          metaurl = baseurl + "metadataservice.asmx";
          #endregion
      }
      else
      {
          offline = false;
  
          //Retrieve the URLs from the Registry
          //RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
          //string ServerUrl = regkey.GetValue("ServerUrl").ToString();
          string ServerUrl = "http://192.168.1.152:5555/MSCRMServices";
          crmurl = ServerUrl + "/2007/crmservice.asmx";
          metaurl = ServerUrl + "/2007/metadataservice.asmx";
          Response.Write("ServerURL " + ServerUrl + "&lt;br&gt;");
          Response.Write("CRMURL:   " + crmurl + "&lt;br&gt;");
          Response.Write("MetaURL:  " + metaurl + "&lt;br&gt;");
  
          //Retrieve the Query String from the current URL
          if (Request.QueryString["orgname"] == null)
          {
              orgname = string.Empty;
          }
          else
          {
              //Query String
              string orgquerystring = Request.QueryString["orgname"].ToString();
              if (string.IsNullOrEmpty(orgquerystring))
              {
                  orgname = string.Empty;
              }
              else
              {
                  orgname = orgquerystring;
              }
  
          }
  
          if (string.IsNullOrEmpty(orgname))
          {
              //Windows Auth URL
              if (Request.Url.Segments[2].TrimEnd('/').ToLower() == "isv")
              {
                  orgname = Request.Url.Segments[1].TrimEnd('/').ToLower();
              }
  
              //IFD URL
              if (string.IsNullOrEmpty(orgname))
              {
                  string url = Request.Url.ToString().ToLower();
                  int start = url.IndexOf("://") + 3;
                  orgname = url.Substring(start, url.IndexOf(".") - start);
              }
          }
          Response.Write(orgname + "&lt;br&gt;");
      }
  
      #endregion
  }
  </code></pre>