从app.config移入构造函数时,绑定失败

时间:2013-02-22 16:19:20

标签: c# wcf .net-4.0 nettcpbinding

我正在尝试摆脱WCF项目的app.config文件,我需要将设置硬编码到我正在生成的DLL中。

我使用svcUtil创建了我的代理类,当我使用App.config时,客户端正常工作

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="ManagementEndpoint">
        <security mode="None" />
      </binding>
    </netTcpBinding>
  </bindings>
  <client>
    <endpoint address="net.tcp://example.com/MyApp/DomainManagement"
        binding="netTcpBinding" bindingConfiguration="ManagementEndpoint"
        contract="MyApp.DomainManagementProxy.IDomainManagement"
        name="DomainManagementEndpoint" />
  </client>
</system.serviceModel>

但是,如果我删除App.config并使用以下

替换默认构造函数
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class DomainManagementClient : System.ServiceModel.ClientBase<MyApp.DomainManagementProxy.IDomainManagement>, MyApp.DomainManagementProxy.IDomainManagement
{

    public DomainManagementClient() 
        : base(new NetTcpBinding(SecurityMode.None, false), 
               new EndpointAddress("net.tcp://example.com/MyApp/DatabaseManagement"))
    {
    }

    //(Snip)

一旦我调用客户端中的第一个方法

,它就会给我以下错误
  

由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有操作“http://example.com/MyApp/DomainManagement/IDomainManagement/GetServerSetup”的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的约束(包括安全要求,例如邮件,传输,无)。

我需要更改/输入构造函数才能使绑定正常工作?

1 个答案:

答案 0 :(得分:1)

Config将'net.tcp://example.com/MyApp/DomainManagement'作为网址。但是你的代码有'net.tcp://example.com/MyApp/DatabaseManagement'。那可能是不匹配。

修改生成的代理不是一个好主意。但是,由于您已决定对URL和绑定进行硬编码,因此您可能会从应用程序代码中执行以下操作。

DomainManagementClient client = new DomainManagementClient(new NetTcpBinding(SecurityMode.None), new EndpointAddress("net.tcp://example.com/MyApp/DatabaseManagement"));

生成的服务代理应该自动将此重载带入绑定和指向的地址。