MSSQL CLR函数webreqest 401未经授权



我有一个CLR函数,从cookie授权的网站获取数据。第一个请求得到一个登录cookie,第二个请求得到我需要的xml数据。问题是,当我从SQL Server作为函数运行第二个请求时,我总是在未经授权的情况下获得401使用相同DLL的测试控制台应用程序运行良好看起来第二个请求没有cookie,但我检查了第二个申请的cookie容器的数量,它不是空的。

String encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(UserName + ":" + Password));
try
{
HttpWebRequest loginrequest = (HttpWebRequest)WebRequest.Create(string.Format("{0}", BaseOrdersAddress));
CookieContainer logincookies = new CookieContainer();
loginrequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + encoded);
loginrequest.AllowAutoRedirect = false;
loginrequest.CookieContainer = logincookies;
loginrequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse loginresponse = (HttpWebResponse)loginrequest.GetResponse();
loginresponse.Close();
if (loginresponse.StatusCode == HttpStatusCode.Found)
{ 
location = loginresponse.Headers[HttpResponseHeader.Location];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(location);
request.CookieContainer = logincookies;
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response1 = request.GetResponse() as HttpWebResponse;

var xresult = new XmlSerializer(typeof(Local_Response));
r = (Local_Response)xresult.Deserialize(response1.GetResponseStream());
}

已解决。使用HttpWebRequest.CookieContainer时出现问题,不知道原因,但它在作为CLR函数运行时不起作用,没有发送Cookie。必须手动将HttpRequestHeader.Cookie添加到请求标头集合中。

别忘了,您的SQLCLR代码是在SQL Server的上下文中执行的。我看到你在代码中有一个用户名和密码——这是怎么做的,从哪里检索到用户名/密码。根据我之前所说的,我敢打赌这是有问题的。

最新更新