0

我正在尝试在我的 Dynamics CRM 部署中实施 Microsoft 的社交网络解决方案加速器。我已经解决了一些代码问题,但最后一个问题让我很难过。社交网络加速器(以下简称 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 外部的测试工具中运行此代码时,它按预期工作并返回一个包含从 Twitter 返回的 XML 的字符串。

但是,当我在我的 CRM 系统中运行它(作为工作流的一部分)时,我在代码执行 wCli.OpenRead(_URL) 的地方收到一个“协议错误”。我跟踪了执行情况,在这两种情况下都使用了相同的 URL 和 Twitter 凭据,在 CRM 系统之外一切正常,在 CRM 内部,我收到错误:

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

我怀疑这可能是因为我在 ISA Web 代理服务器后面运行,但是 ISA 中的日志控制台表明 Web 请求永远不会那么远。有些东西导致这在源头上停滞不前。有人有什么建议吗?

4

1 回答 1

0

我已经确认这实际上是一个代理问题。我不确定我是否完全理解为什么会出现问题,但我尝试了这个小修复,它确实有效:

        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
            {

显然,这需要以某种方式进行配置,但它已经证明了这个概念。

于 2010-01-18T23:25:06.637 回答