来自 wcf 服务的 Httpwebrequest
Httpwebrequest from wcf service
我是 WCF 的新手,我已经为 SSRS 报告的 httpwebrequest 创建了一项服务,并以 PDF 或 EXCEL 格式呈现报告并将其保存到驱动器上的特定位置。
我在按钮单击事件上从 Web 应用程序调用此服务。但它在 GetResponse()
上出错
The remote server returned an error: (403) Forbidden
此外,我在控制台应用程序中创建了相同的代码,它运行完美。
下面是我的代码
public class ReportGenerator : IReportGenerator
{
public void ReportRequest()
{
try
{
string URL = "http://localhost/ReportServer2008?/ssrswcf/ssrswcftest";
string Command = "Render";
string Format = "PDF";//"EXCEL"
URL = URL + "&rs:Command=" + Command + "&rs:Format=" + Format + "&sid=5";
System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
Req.UseDefaultCredentials = true;
Req.Method = "GET";
string path = @"C:\ssrswcftest\" + Convert.ToString(Guid.NewGuid()) + @".pdf";
System.Net.WebResponse objResponse = Req.GetResponse();
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
System.IO.Stream stream = objResponse.GetResponseStream();
byte[] buf = new byte[1024];
int len = stream.Read(buf, 0, 1024);
while (len > 0)
{
fs.Write(buf, 0, len);
len = stream.Read(buf, 0, 1024);
}
stream.Close();
fs.Close();
}
catch (WebException ex)
{
//
}
catch (Exception ex)
{
//
}
}
}
下面是fiddler的详细信息
使用 IIS 托管的 WCF 出现错误
请求Header
GET /ReportServer2008?/ssrswcf/ssrswcftest&rs:Command=Render&rs:Format=PDF&sid=5 HTTP/1.1
Authorization: Negotiate some_long_string
Host: xyz
响应Header
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Length: 2925
Content-Type: text/html; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
X-AspNet-Version: 2.0.50727
Date: Mon, 22 Jun 2015 15:39:29 GMT
使用控制台应用程序托管的 WCF 运行完美
请求Header
GET /ReportServer2008?/ssrswcf/ssrswcftest&rs:Command=Render&rs:Format=PDF&sid=5 HTTP/1.1
Authorization: Negotiate some_long_string
Host: xyz
响应Header
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 25653
Content-Type: application/pdf
Expires: Mon, 22 Jun 2015 16:16:42 GMT
Last-Modified: Mon, 22 Jun 2015 16:17:43 GMT
Set-Cookie: RSExecutionSession%3a%2fssrswcf%2fssrswcftest=aywu4s45sefnmw45z50bn2vh; path=/
Server: Microsoft-HTTPAPI/2.0
X-AspNet-Version: 2.0.50727
FileExtension: pdf
Content-Disposition: attachment; filename="ssrswcftest.pdf"
Date: Mon, 22 Jun 2015 16:17:42 GMT
Authorization: Negotiate
indicates that authentication is in use. 可能是您的 WCF 服务没有所需的凭据。询问服务所有者需要什么身份验证并进行配置。
当它从 IIS 托管时,它只需要凭据信息。它从控制台运行,因为该控制台应用程序是以管理员身份执行的。
public class ReportGenerator : IReportGenerator
{
public void ReportRequest()
{
try
{
string URL = "http://localhost/ReportServer2008?/ssrswcf/ssrswcftest";
string Command = "Render";
string Format = "PDF";//"EXCEL"
URL = URL + "&rs:Command=" + Command + "&rs:Format=" + Format + "&sid=5";
System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
Req.Credentials = new NetworkCredential(@"username", "password");
Req.Method = "GET";
string path = @"C:\ssrswcftest\" + Convert.ToString(Guid.NewGuid()) + @".pdf";
System.Net.WebResponse objResponse = Req.GetResponse();
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
System.IO.Stream stream = objResponse.GetResponseStream();
byte[] buf = new byte[1024];
int len = stream.Read(buf, 0, 1024);
while (len > 0)
{
fs.Write(buf, 0, len);
len = stream.Read(buf, 0, 1024);
}
stream.Close();
fs.Close();
}
catch (WebException ex)
{
//
}
catch (Exception ex)
{
//
}
}
}
我是 WCF 的新手,我已经为 SSRS 报告的 httpwebrequest 创建了一项服务,并以 PDF 或 EXCEL 格式呈现报告并将其保存到驱动器上的特定位置。
我在按钮单击事件上从 Web 应用程序调用此服务。但它在 GetResponse()
上出错The remote server returned an error: (403) Forbidden
此外,我在控制台应用程序中创建了相同的代码,它运行完美。
下面是我的代码
public class ReportGenerator : IReportGenerator
{
public void ReportRequest()
{
try
{
string URL = "http://localhost/ReportServer2008?/ssrswcf/ssrswcftest";
string Command = "Render";
string Format = "PDF";//"EXCEL"
URL = URL + "&rs:Command=" + Command + "&rs:Format=" + Format + "&sid=5";
System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
Req.UseDefaultCredentials = true;
Req.Method = "GET";
string path = @"C:\ssrswcftest\" + Convert.ToString(Guid.NewGuid()) + @".pdf";
System.Net.WebResponse objResponse = Req.GetResponse();
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
System.IO.Stream stream = objResponse.GetResponseStream();
byte[] buf = new byte[1024];
int len = stream.Read(buf, 0, 1024);
while (len > 0)
{
fs.Write(buf, 0, len);
len = stream.Read(buf, 0, 1024);
}
stream.Close();
fs.Close();
}
catch (WebException ex)
{
//
}
catch (Exception ex)
{
//
}
}
}
下面是fiddler的详细信息
使用 IIS 托管的 WCF 出现错误
请求Header
GET /ReportServer2008?/ssrswcf/ssrswcftest&rs:Command=Render&rs:Format=PDF&sid=5 HTTP/1.1
Authorization: Negotiate some_long_string
Host: xyz
响应Header
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Length: 2925
Content-Type: text/html; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
X-AspNet-Version: 2.0.50727
Date: Mon, 22 Jun 2015 15:39:29 GMT
使用控制台应用程序托管的 WCF 运行完美
请求Header
GET /ReportServer2008?/ssrswcf/ssrswcftest&rs:Command=Render&rs:Format=PDF&sid=5 HTTP/1.1
Authorization: Negotiate some_long_string
Host: xyz
响应Header
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 25653
Content-Type: application/pdf
Expires: Mon, 22 Jun 2015 16:16:42 GMT
Last-Modified: Mon, 22 Jun 2015 16:17:43 GMT
Set-Cookie: RSExecutionSession%3a%2fssrswcf%2fssrswcftest=aywu4s45sefnmw45z50bn2vh; path=/
Server: Microsoft-HTTPAPI/2.0
X-AspNet-Version: 2.0.50727
FileExtension: pdf
Content-Disposition: attachment; filename="ssrswcftest.pdf"
Date: Mon, 22 Jun 2015 16:17:42 GMT
Authorization: Negotiate
indicates that authentication is in use. 可能是您的 WCF 服务没有所需的凭据。询问服务所有者需要什么身份验证并进行配置。
当它从 IIS 托管时,它只需要凭据信息。它从控制台运行,因为该控制台应用程序是以管理员身份执行的。
public class ReportGenerator : IReportGenerator
{
public void ReportRequest()
{
try
{
string URL = "http://localhost/ReportServer2008?/ssrswcf/ssrswcftest";
string Command = "Render";
string Format = "PDF";//"EXCEL"
URL = URL + "&rs:Command=" + Command + "&rs:Format=" + Format + "&sid=5";
System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
Req.Credentials = new NetworkCredential(@"username", "password");
Req.Method = "GET";
string path = @"C:\ssrswcftest\" + Convert.ToString(Guid.NewGuid()) + @".pdf";
System.Net.WebResponse objResponse = Req.GetResponse();
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
System.IO.Stream stream = objResponse.GetResponseStream();
byte[] buf = new byte[1024];
int len = stream.Read(buf, 0, 1024);
while (len > 0)
{
fs.Write(buf, 0, len);
len = stream.Read(buf, 0, 1024);
}
stream.Close();
fs.Close();
}
catch (WebException ex)
{
//
}
catch (Exception ex)
{
//
}
}
}