你可以从问题标题中看出我是WCF的新手。我已实现此Web服务,其中一个方法抛出自定义FaultException。
namespace Feed
{
[ServiceContract]
public interface IMyClass
{
[OperationContract]
[FaultContract(typeof(CustomError))]
DataSet MyMethod(int A, int T);
}
[DataContract]
public class CustomError
{
public CustomError(string msg, int code, int id)
{
Id = id;
ErrorMessage = msg;
ErrorCode = code;
}
[DataMember]
[DataMember]
public string ErrorMessage
{
get;
set;
}
[DataMember]
public int ErrorCode
{
get;
set;
}
[DataMember]
public int Id
{
get;
set;
}
}
}
然后,我在MyMethod
的实现中抛出了正确的异常namespace Feeds
{
public class MyClass : IMyClass
{
DataSet MyMethod(int A, int T)
{
try
{
//todo
DataSet ds = new DataSet();
return ds;
}
catch (Exception ex)
{
throw new FaultException<CustomError>(new CustomError("a", 1, 0));
}
}
}
}
到目前为止一切顺利。现在我创建了一个使用此Web服务的简单ASP.NET网站。我在该网站中为MyClass.svc Web服务添加了一个WebReference。问题是,当我试图捕获异常时: catch(FaultException ex) { } 它无法识别CustomError。我做了以下故障排除: 1.确保我已更新wsdl(完成了很多次,尝试更改其他内容,所有内容都反映在客户端) 2.尝试BasicHttpBinding以及wsHttpBinding(不确定是否有所作为) 3.用Google搜索,并虔诚地跟踪MSDN中的示例代码。
仍然没有运气!我错过了什么吗?任何建议将不胜感激。
答案 0 :(得分:1)
发现问题所在。
我的ASP.NET网站是在.NET Framework 2.0上(默认情况下是VS 2010),我通过右键单击项目并选择“添加Web引用...”来添加对Web服务的引用。 />
但是,我需要做什么,选择“添加服务引用..”将Web服务添加为服务引用。由于.NET 2.0不支持服务引用,我不得不将我的.NET框架升级到3.5,添加服务引用,一切都像魅力一样! This post在我脑海中点亮了灯泡。感谢大家为此付出的所有努力。
答案 1 :(得分:0)
[FaultContract(typeof(CustomError))]
MyMethod();