【问题标题】:How to get overloaded constructors of a class through WCF?如何通过 WCF 获取类的重载构造函数?
【发布时间】:2014-04-01 00:26:19
【问题描述】:

如何将我的类上的重载构造函数传递给 WCF 客户端/消费者?

基本上,WCF 认为我的 B 类只有默认值,没有参数/空构造函数。如何让客户端调用重载的构造函数?

public class A
{
    public string MyField { get; set; }

}

public class B : A
{
    public List<C> MyList { get; set; }

    // when called on the WCF client side, MyList is null (so this constructor is not being called)
    public B()
    {
        MyList = new List<C>();
    }

    // not available on WCF client side
    public B(A a) : this()
    {
        base.MyField = a.MyField;
    }

    // not available on WCF client side
    public void DoSomething()
    {
        // do stuff
    }
}

【问题讨论】:

    标签: c# wcf serialization constructor constructor-overloading


    【解决方案1】:

    构造函数是 wcf 客户端不知道的仅类构造。界限不同。

    客户端只知道代理类。 WCF 基础结构使用默认构造函数创建代理类。独立于服务器端的构造函数,因为从 WCF 的角度来看,它们没有任何意义。

    只有服务合同、运营合同和数据合同很重要。

    如果您想在代理类中添加更多功能,您始终可以在客户端添加同名的部分类并向其添加代码。 (重载的构造函数等)请注意服务器并不真正关心这一点。

    【讨论】:

    • 好的,很好的信息。如何建议我将这个功能提供给我的客户?就是重载的构造函数。
    • 通常 WCF 客户端会生成一个带有分部类的 Reference.cs 文件。您可以添加另一个 CS 文件(以免干扰原始自动生成的 reference.cs 文件)和您的构造函数。
    • 我也有一个方法(见更新的代码)。我可以在类中添加任何注释以访问客户端上的方法“DoSomething()”吗?
    • 您可以使用 OperationContract 属性标记 DoSomething 以将其公开为 wcf 客户端的 Web 方法。假设容器类是服务类。
    • Lindsay,看起来您希望在发出客户端 wcf 请求时在服务器上发生一些特定的事情(初始化值等)。你能完整地表达出来吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多