【问题标题】:How to call WCF Service overloaded constructors in client如何在客户端调用 WCF 服务重载构造函数
【发布时间】:2014-08-07 07:36:07
【问题描述】:

我是 WCF 的新手。我在 WCF 服务中创建了两个重载的构造函数。我在我的客户端应用程序中添加了 WCF 服务的引用。我可以从客户端调用 WCF 方法。但我不知道,

如何从客户端调用重载的构造函数?有可能吗?

我搜索了相同的内容,我查看了一些答案,但我无法清楚地理解这些事情,因为我是新手。我正在寻找直接的简单示例来调用 WCF 构造函数。

如果有人提供示例链接以供参考,将会很有帮助。

【问题讨论】:

  • 服务由框架在服务器端实例化。您想将哪些参数传递给这些构造函数?如果它们与身份验证/授权无关,那么您应该将它们传递给服务操作(方法)。
  • 我想将业务对象传递给构造函数

标签: c# wcf constructor wcf-client


【解决方案1】:

SOAP 服务从不公开它特定于 .NET 平台的任何内容。这包括构造函数。

请记住,SOAP 服务公开的任何内容都是通过在 WSDL 中描述来公开的。 WSDL中没有办法描述:

  1. 构造函数
  2. 事件
  3. 索引器
  4. 泛型

等等

【讨论】:

    【解决方案2】:

    正如我所说,服务是由框架在服务器端实例化的。您只能访问生成的代理,该代理在后台连接到您的服务。

    无论如何,您想要的通过服务构造函数是无法实现的。如果您有业务对象,则将其传递给服务操作:

    using(var serviceClient = new MyServiceClient())
    {
       serviceClient.SomeOperation(businessObject);
    }
    

    您在此处看到的MyServiceClient 的构造函数与您为服务合同定义的构造函数完全没有关系。

    此外,您可能需要研究服务实例化模式,因为在我看来您不想要每次调用模式。

    【讨论】:

      【解决方案3】:

      你应该可以做到的。需要对 WCF 实例的管理方式有一点了解。

      理论:

      1. 在调用 WCF 服务时,服务调度程序默认为每次调用创建一个新实例(请参阅 InstanceContextMode)。

      2. 根据 InstanceContextMode 调用 GetInstance() 和 ReleaseInstance()(属于 IInstanceProvider)分别实例化和释放服务对象(InstanceContextMode 为 Single 时除外)。

      3. 在上述场景中,调用了默认构造函数。

      4. WCF 提供了可扩展点,您可以在其中注入自己的实例提供程序(以便您能够调用重载的构造函数)。

      行动:

      1. 通过从 IInstanceProvider 继承来创建一个新的 Instance Provider。覆盖 GetInstance() 和 ReleaseInstance() 方法。在 GetInstance() 方法上使用您的重载构造函数返回一个新的服务实例。

      2. 创建一个新的服务行为(例如 InstanceProviderBehavior)属性(通过从 Attribute 和 IServiceBehavior 继承)以应用于服务合同,以便服务调度程序查找您自己的自定义实例提供程序。

      这是一篇很棒的文章 - http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-04
        • 2011-06-06
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多