Vin*_*c 웃 0 c# asp.net wcf jquery redirect
我正在使用WCF服务(启用Ajax).在我的服务中,当发生错误时,我将其记录在数据库中,并且我将用户重定向到错误页面.
要重定向用户,我使用此:
HttpContext.Current.Response.Redirect("error.aspx");
Run Code Online (Sandbox Code Playgroud)
所以我正在记录错误并重定向用户
问题是,当发生错误时,会多次记录该错误,并且不会重定向用户.
当我说它被多次记录时,它意味着:我的数据库中有多个错误记录用于此错误.(仅假设一个错误有一个日志)
所以我试着理解:为什么?
看起来当我尝试重定向时,服务方法再次开始(就像它再次调用一样).
这是我的完整流程:
我用jquery调用服务:
$.getJSON("ContactService.svc/getsubtitle", { titleid: titleid }, function (data) {
...
});
Run Code Online (Sandbox Code Playgroud)
这是服务方法:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public void getsubtitle(string titleid)
{
try
{
.... (ERROR !)
}
catch (Exception ex)
{
LogTheError(ex);
HttpContext.Current.Response.Redirect("error.aspx");
}
}
Run Code Online (Sandbox Code Playgroud)
所以,你们能帮助我理解为什么HttpContext.Current.Response.Redirect不重定向并做一件奇怪的事情吗?
Web服务应该由机器而不是人类使用,因此在显示错误页面的Web服务中没有任何意义.
此外,WCF服务应该与传输无关,因为它可以使用除http以外的其他传输通道,例如tcp,命名管道等.您假设有一个HttpContext和一个客户端,它将了解什么是HTTP-302状态代码,这是在Response.Redirect调用后将发送给客户端的内容.这是错误的,您不应该假设您的消费者将是一种特定类型的软件或具有某些功能,如Web浏览器.
相反,创建一个POCO类,将其声明为FaultContract属性并在其中返回错误响应.这对服务消费者而不是html页面很有用.
请参阅本文,了解如何在WCF中实现错误合同处理:
http://www.codeproject.com/Articles/376303/Fault-Contract-Handling-Errors-in-WCF-and-A-Very-S
[ServiceContract]
public class Service1
{
[OperationContract, WebGet(UriTemplate="ProcessSomething?a={a}&b={b}")]
public void GetData(string a, string b)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Redirect;
WebOperationContext.Current.OutgoingResponse.Headers.Add("Location", "http://www.microsoft.com");
//process request here
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5885 次 |
| 最近记录: |