我创建了自己的类:
[DataContract]
public class MyOperationFault : ExceptionDetail
{
/// <summary>
/// Contructor
/// </summary>
/// <param name="ex"></param>
public MyOperationFault(Exception ex) : base(ex)
{
}
}
然后我的wcf服务界面如下所示:
[OpearationContract()]
[FaultContract(typeof(MyOperationFault))]
void DoWork();
现在一切都在开发环境中按预期工作 - 当我举起FaultException
:
throw new FaultException<MyOperationFault>(new MyOperationFault(new Exception("Failed")));
它被客户端抓住没问题。
当我使用wcftestclient.exe
工具测试我的服务时,会出现问题。我收到此错误:
无法添加服务。可能无法访问服务元数据。 确保您的服务正在运行并公开元数据。 错误:无法从中获取元数据 http://localhost:33620/MyService.svc如果这是Windows(R) 请访问您的Communication Foundation服务 检查您是否已在指定的位置启用元数据发布 地址。有关启用元数据发布的帮助,请参阅 MSDN文档在 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata交流 错误URI:http://localhost:33620/MyService.svc元数据 包含无法解析的引用: 'http://localhost:33620/MyService.svc'。无法连接到 http://localhost:33620/MyService.svc。 TCP错误代码10061:否 可以建立连接,因为目标机器主动拒绝 它127.0.0.1:33620。无法连接到远程服务器号 可以建立连接,因为目标机器主动拒绝 它127.0.0.1:33620
一旦我从服务的方法中注释掉[FaultContract(typeof(MyOperationFault))]
,wcftestclient
就会毫无故障地开始工作。如何解决这个问题?
答案 0 :(得分:0)
我遇到了同样的问题。原来用作详细参数的类需要一个无参数构造函数才能工作......
TestClient可能失败了,因为MyOperationFault缺少无参数构造函数。
我提出的解决方案是添加一个私有无参数构造函数,如
[DataContract]
public class MyOperationFault : ExceptionDetail
{
/// i dont know why but this fixed the issue
private MyOperationFault()
{
}
/// <summary>
/// Contructor
/// </summary>
/// <param name="ex"></param>
public MyOperationFault(Exception ex) : base(ex)
{
}
}