【问题标题】:how create c#-SoapClient from Channelfactory如何从 Channelfactory 创建 c#-SoapClient
【发布时间】:2014-03-27 11:57:38
【问题描述】:

我们的软件通过

使用了许多 WebService 调用
sc = new MyServiceSoapClient() 

这个构造函数读取 Winword.exe.config 中的 EndpointAddress 和绑定和行为 (这是因为out软件是winword插件)

但是客户要求我们不要碰Winword.exe.config文件。

所以我们改变了策略,从 ChannelFactory 创建通道 因为在这种情况下,我们可以使用任何我们喜欢的“.config”文件。

不幸的是,我们从 ChannelFactory 获得的通道是“MyServiceSoap”,但不是“MyServiceSoapClient”。

我们不想通过创建的通道进行每个 WebService 调用 因为这意味着我们重新实现了很多这样的调用:

创建请求对象

调用WebService方法

从响应对象中读取结果。

所以我们尝试以这种方式实例化 MyServiceSoapClient:

sc = new MyServiceSoapClient(chfact.Endpoint.Binding, chfact.Endpoint.Address)

这很好,我们终于从任何“.config”文件中取出了我们的 SoapClient,并且我们不再依赖于 Winword.exe.config 文件。

但后来客户出于安全原因在配置文件中添加了一些行为。

嗯,channelFactory 肯定会从配置文件中读取行为,但没有这样的构造函数:

sc = new MyServiceSoapClient(Binding, Address, Behavior)

因此我们无法从现有的 MyServiceSoap 通道创建完全有效的 MyServiceSoapClient。

如果我们使用默认构造函数创建 MyServiceSoapClient,则行为可以正常工作 - 但客户需要配置 Winword.exe.config,但他拒绝执行此操作。

也不可能像这样进行类型转换:

sc=(MyServiceSoapClient)channel;

因为 channel 是一个 MyServiceSoap 接口。

问题:

有什么方法可以从 MyServiceSoap-channel 或从 channelFactory 创建 MyServiceSoapClient ?

或者可以通过一些复杂的类型转换来完成吗?

提前多谢

你的,杰拉德

【问题讨论】:

    标签: c# app-config soap-client webservice-client channelfactory


    【解决方案1】:

    如果你把所有的 wcf 配置放在外部文件中,这样你就不需要再碰 winword.exe.config 了:

    <system.serviceModel>
       <bindings configSource="bindings.config" />
       <behaviors configSource="behaviors.config" />
       <client configSource="client.config" />
       <services configSource="services.config" />
      .....
    </system.serviceModel>
    

    因此,对于 &lt;system.serviceModel&gt; 中的每个部分,您可以使用 configSource= 属性指定一个外部配置文件(不要让 Visual Studio 的红色波浪线混淆它 - 是的,它确实 工作!)。

    您可以对任何配置 section 执行此操作 - 但不幸的是,无法为整个 section group (&lt;system.serviceModel&gt;) 执行此操作。

    (这是从这个答案复制的:https://stackoverflow.com/a/1598776/725866

    【讨论】:

    • 哎呀 - 抱歉,我还不够清楚。实际上客户根本不想拥有任何 Winword.exe.config 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多