CrmImpersonator и IFD - PullRequest
       10

CrmImpersonator и IFD

0 голосов
/ 30 октября 2008

У меня есть страница asp.net, которая отлично работает для внутренних вызовов служб, однако при использовании на внешнем сайте я просто не могу заставить его работать вообще.

CRMImpersonator работает нормально при доступе изнутри, но при использовании интерфейса IFD все, что я получаю, это сообщение:

'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

Любые идеи будут с благодарностью приняты мой код, как показано ниже

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 + "<br>");
        Response.Write("CRMURL:   " + crmurl + "<br>");
        Response.Write("MetaURL:  " + metaurl + "<br>");

        //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 + "<br>");
    }

    #endregion
}

1 Ответ

0 голосов
/ 30 октября 2008

Добавление Microsoft.Crm.Webservices.dll в gac решило эту проблему.

Также необходимо использовать следующий sql, чтобы гарантировать, что пользователь выдавал себя за другого:

Execute as user =@username
Select * from FilteredActivityPointer;
revert
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...