我在尝试从c#客户端访问iis(本地)托管的WCF服务时收到此错误:
无法找到名称为“X”且合同“合同”的端点元素 在ServiceModel客户端配置部分中命名。这可能是 因为没有找到您的应用程序的配置文件,或 因为在。中找不到与此名称匹配的端点元素 客户元素。
这是客户端的app.config(它是一个NUnit fixture只是为了测试连接):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_MyWs" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/MyWs/MyWs.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyWs"
contract="MyServiceSvc.IMyWs"
name="BasicHttpBinding_MyWs" />
</client>
</system.serviceModel>
</configuration>
如果我浏览
https://localhost/MyWs/MyWs.svc?wsdl
我得到正确的输出,所以服务器部分工作正常 此外,我可以用soapUI测试我的ws所以问题必须在客户端,也许在app.config中。
我的客户端代码,以防万一有人想要抓住它:
[TestFixture]
public class MyWsProxyFixture
{
private readonly MyWsClient _client = new MyWsClient();
[Test]
public void ProxyCreation()
{
Assert.IsNotNull(_client);
}
//More tests here
}
更有趣,完全相同的配置和客户端在另一台机器上工作。是的,它是真实的。我自己也不敢相信,但事实也是如此。
你能给出一些提示或建议来解决这个问题吗? 谢谢!
PS:客户端的服务引用很好。
答案 0 :(得分:1)
据我所知,它可能是一个多项目配置问题:
如果您的解决方案中有多个项目,那么您必须将该配置文件放在特定项目的配置中消费wcf服务。
假设您有2个项目,那么将有2个相应的配置文件。
答案 1 :(得分:0)
根本没有问题出现在App.config中
实际上,同样的App.config在另一台机器上工作正常
问题在于Nunit。默认情况下,它使用“卷影复制”设置复制临时文件夹中的所有dll并从那里执行二进制文件。我不能理解为什么它复制dll而不是.config。这没有意义!
在我将阴影副本设置为false后,它也开始在我的机器上工作。
PS:客户端在其他机器上运行,因为环境在Resharper下运行,Resharper默认关闭卷影副本。
现在有道理!
希望这有助于有同样愚蠢问题的人