我正在尝试在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请求永远不会那么远。有些事情导致这种情况在源头停滞不前。有人有任何建议吗?
答案 0 :(得分: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
{
显然,这需要以某种方式进行配置,但它已经证明了这一概念。