我在服务器B上有一个WCF服务。然后在机器A上是客户端,这是一个Windows服务。在一个单独的dll中,代表了该服务的所有业务逻辑。所以我的WCF代理就在那边。我有2个app.config(仅限客户端):1表示服务,另一个表示dll。所以我尝试(出于测试目的)将servicemodel配置部分放在两者中。两者仍然,它不起作用,它说它找不到具有该名称和该合同的终点......
我在这里尝试做的是以编程方式修改配置。这是'业务层dll中的代码:
Dim ep As New EndpointAddress(New Uri(ConfigurationManager.AppSettings(nomServeurCible)), _
EndpointIdentity.CreateDnsIdentity(ConfigurationManager.AppSettings("Identity_" & nomServeurCible)))
serviceCible = New ServiceProxy.ExecOperClient("wsHttp", ep)
以下是配置文件的示例:
<add key="TEST1" value="http://TEST1:8000/MySpacePerso/ExecOperService"/>
<add key="TEST1_CertificateSerialNumber" value="10 hj 6y 7b 00 01 32 12 01 21"/>
<add key="Identity_TEST1" value="TEST1"/>
<system.serviceModel>
<client>
<endpoint address="http://SERV_NAME:8000/CSSTQDA/ExecOperService" binding="wsHttpBinding"
behaviorConfiguration="myClientBehavior"
bindingConfiguration="MybindingCon" contract="ExecOper.Service.IExecOper"
name="wsHttp">
<identity>
<dns value="SERV_CERT_NAME"/>
</identity>
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="MybindingCon">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceTraitementBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myClientBehavior">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
答案 0 :(得分:0)
好吧,事实证明这只是我的代理类中的ConfigurationName标签问题...抱歉:-)它没有合同的正确名称空间。完全限定名称必须与app.config中的名称匹配。