我具有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());
}
答案 0 :(得分:1)
已解决。 问题在于使用 HttpWebRequest.CookieContainer ,不知道为什么,但是在作为CLR函数运行时不起作用,没有发送cookie。必须手动添加 HttpRequestHeader.Cookie 来请求标头集合。
答案 1 :(得分:0)
不要忘记,您的SQLCLR代码在SQL Server上下文中执行。我看到您在代码中有一个用户名和密码-这样做是什么,从中检索到的用户名/密码在哪里。我敢打赌,根据我之前所说的,这有问题。