我正在尝试摆脱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”的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的约束(包括安全要求,例如邮件,传输,无)。
我需要更改/输入构造函数才能使绑定正常工作?
答案 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"));
生成的服务代理应该自动将此重载带入绑定和指向的地址。