WCF服务重定向

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不重定向并做一件奇怪的事情吗?

Osc*_*car 6

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


Sud*_*hir 6

 [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)