首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获由一个SoapException引发的WebService

捕获由一个SoapException引发的WebService
EN

Stack Overflow用户
提问于 2011-02-15 15:05:47
回答 2查看 27.5K关注 0票数 6

我写了以下服务:

代码语言:javascript
复制
namespace WebService1
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string Test(string str)
        {
            if (string.IsNullOrEmpty(str))
                throw new SoapException("message", SoapException.ClientFaultCode);
            else
                return str;
        }
    }
}

以及测试它的基本应用程序(单击事件上调用Test方法的一个按钮):

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
{
    ServiceReference1.Service1SoapClient ws = new WindowsFormsApplication1.ServiceReference1.Service1SoapClient();

    try
    {
        ws.Test("");
    }
    catch (SoapException ex)
    {
         //I never go here
    }
    catch (FaultException ex)
    {
        //always go there
    }
    catch (Exception ex)
    {

    }
}

我想捕捉WebService抛出的get,但我总是以消息的形式访问get catch块:

...WebService1\WebService1\Service1.asmx.cs:line 25中的

System.Web.Services.Protocols.SoapException: WebService1.Service1.Test(String )

我怎么能抓到真正的SoapException,而不是FaultException呢?在WebService里有什么我错过的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-17 13:59:29

我认为主要的“问题”是,您正在使用连接到ASP.NET Web服务(.asmx)的WCF服务引用。

处理此问题的“最简单”方法可能是在客户端上使用Web引用而不是WCF服务引用。为此,您可以在对话框底部选择"Advanced“按钮,然后在屏幕底部选择Add引用。我相信使用网络参考应该会给你一个SoapException。

正确的方法(如果您想遵循Microsofts的建议)是发布一个WCF服务,而不是一个.asmx服务。不过那是另一章..。

票数 7
EN

Stack Overflow用户

发布于 2011-02-17 14:45:22

当ASMX服务抛出SoapException时,.NET返回SOAP故障消息。

SOAP错误作为FaultException类型的例外返回给服务引用。所以你永远不会看到一个SoapException

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5005314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档