从Proxy Client将参数传递给WCF Service Ctor

时间:2014-02-20 05:14:57

标签: c# .net wcf

这可能是一个基本问题,因为我是WCF的新手。我甚至不知道这是否得到支持。

我有一个名为MyCustomService的WCF服务。我在我的客户端解决方案中添加了此服务引用,现在我可以通过调用:

来创建代理对象
MyCustomServiceClient myClient = new MyCustomServiceClient();
myClient.GetData();
myClient.GetData();

如何布置我的服务,以便在代理实例创建期间传递参数,即

MyCustomServiceClient myClient = new MyCustomServiceClient("SomeString");

我注意到我所做的每个方法调用都会创建一个MyCustomService的新实例(即我可以在MyCustomService Ctor上获得断点)。所以,我想要在创建代理对象(即SomeString)时为我所做的所有调用存在的值,直到myClient的生命周期

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Visual Studio(或svcutil.exe)的代理生成功能创建了一个具有五个不同构造函数签名的代理类。您要问的是,接受单个字符串的构造函数是非常有用的,因为它允许您从app.config或Web.config文件中引用不同的客户端配置。

采用这个非常简单的假设配置文件:

<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="serverABinding" />
      <endpoint name="serverBBinding" />
    </client>
  </system.serviceModel>
</configuration>

然后,您可以控制用于代理的绑定:

string endpointName = useB ? "serverBBinding" : "serverABinding";

var myClient = new MyCustomServiceClient(endpointName);

当然,我上面显示的端点绑定太简单了,实际上并没有用,但希望你能理解。

您的动机并不十分清楚,但听起来您希望控制应用程序的所有代理实例中的代理行为。如果这是你想要的,那么不要使用构造函数:使用app.config或Web.config文件中的端点配置来控制代理连接。 Visual Studio生成的默认端点配置使用与代理客户端的默认名称匹配的端点名称。更改此端点定义,您将更改服务客户端的行为。

由于您是WCF的新手,我的建议是:了解配置文件的所有内容。一旦理解了WCF配置文件,就可以理解WCF。

答案 1 :(得分:-2)

您的WCF服务中不能包含带参数的构造函数,即使您尝试创建此类服务也会出现以下错误。

  

提供的服务类型无法作为服务加载,因为它   没有默认(无参数)构造函数。修复   问题,向类型添加默认构造函数,或传递实例   主机的类型。

现在,如果您希望数据为客户端持久存在,您可以将ServiceInstanceContextMode设置如下,作为Service Class上的属性

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
 public class Service : IService