Ошибка протокола ускорителя социальных сетей Dynamics CRM - PullRequest
0 голосов
/ 18 января 2010

Я пытаюсь внедрить ускоритель решений Microsoft для социальных сетей в моем развертывании Dynamics CRM. Я уже решил ряд проблем с кодом, но этот последний поставил меня в тупик. Ускоритель социальных сетей (в дальнейшем именуемый SNA) использует следующий код для получения данных из Twitter:

        case "GET":
            WebClient wCli = new WebClient();
            if (_creds != null)
            {
                wCli.Credentials = _creds;
            }
            try
            {
                using (Stream str = wCli.OpenRead(_URL))
                {
                    using (StreamReader reader = new StreamReader(str))
                    {
                        responseXml = reader.ReadToEnd();
                    }
                }
            }
            catch (WebException ex)
            {
                if (ex.Response is HttpWebResponse)
                {
                    if ((ex.Response as HttpWebResponse).StatusCode == HttpStatusCode.NotFound)
                    {
                        return null;
                    }
                }
                throw ex;
            }

Очевидно, что есть много настроек до вызова этого кода.

Когда я запускаю этот код в Visual Studio или в тестовом комплекте вне Dynamics CRM, он работает как положено и возвращает строку, содержащую XML, возвращенную из Twitter.

Но когда я запускаю его внутри своей системы CRM (как часть рабочего процесса), я получаю «Ошибка протокола» в тот момент, когда код выполняет wCli.OpenRead (_URL). Я проследил за выполнением, и в обоих случаях используются одинаковые URL и учетные данные Twitter, вне системы CRM все работает, внутри CRM я получаю сообщение об ошибке:

{"The remote server returned an error: (403) Forbidden."}

Я подозреваю, что это может быть вызвано тем фактом, что я работаю за веб-прокси-сервером ISA, однако консоль ведения журнала в ISA предполагает, что веб-запрос никогда не заходит так далеко. Что-то заставляет это останавливаться у источника. У кого-нибудь есть предложения?

1 Ответ

0 голосов
/ 19 января 2010

Я подтвердил, что это на самом деле проблема с прокси.Я не уверен, что полностью понимаю, почему это проблема, но я попробовал это небольшое исправление, и оно сработало:

        case "GET":
            WebClient wCli = new WebClient();
            if (_creds != null)
            {
                wCli.Credentials = _creds;
            }
                //[TPL] Configure web proxy
                IWebProxy proxy = new WebProxy("sbs", 8080);
                proxy.Credentials = new NetworkCredential(@"DOMAIN\User", "password");
                wCli.Proxy = proxy;
            try
            {

Очевидно, что это нужно как-то настраивать, но это подтвердило концепцию.

...