Wcf和ExceptionDetail问题

时间:2011-03-01 20:44:20

标签: wcf .net-3.5 faultexception

我创建了自己的类:

[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就会毫无故障地开始工作。如何解决这个问题?

1 个答案:

答案 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)
    {
    }
}