[英]Catching a SoapException thrown by a WebService
我寫了以下服務:
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;
}
}
}
並且有一個基本的應用程序來測試它(一個按鈕在click事件上調用Test
方法):
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拋出的SoapException
,但我總是轉到FaultException
catch塊獲取該消息:
System.Web.Services.Protocols.SoapException:[...] WebService1 \\ WebService1 \\ Service1.asmx.cs中的WebService1.Service1.Test(String str)的消息:第25行
我怎么能捕獲真正的SoapException
,而不是FaultException
? WebService中有什么我想念的嗎?
我認為主要的“問題”是您正在使用連接到ASP.NET Web服務(.asmx)的WCF服務引用。
處理此問題的“最簡單”方法可能是在客戶端上使用Web引用而不是WCF服務引用。 您可以通過選擇“添加服務引用”對話框底部的“高級”按鈕,然后選擇該屏幕底部的“添加Web引用”來執行此操作。 我相信使用Web Reference應該會給你一個SoapException。
正確的方法(如果你想遵循微軟的建議)將是發布WCF服務而不是.asmx服務。 這是另一章,但..
當ASMX服務拋出SoapException
,.NET將返回SOAP Fault消息。
SOAP Fault作為FaultException
類型的異常返回給服務引用。 所以你永遠不會看到SoapException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.