2

我创建了自己的类,如下所示:

[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 服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: http://localhost:33620/MyService.svc的 MSDN 文档 元数据包含无法解析的引用:' 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开始工作而不会出现故障。如何解决这个问题?

4

1 回答 1

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)
    {
    }
}
于 2017-08-31T13:41:41.970 回答