0

我在尝试从 ac# 客户端访问 iis(本地)托管的 WCF 服务时收到此错误:

在 ServiceModel 客户端配置部分中找不到名称为“X”和合同“合同名称”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。

这是客户端的 app.config(它是一个 NUnit 夹具,只是为了测试连接):

<?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:客户端中的服务参考很好。

4

2 回答 2

1

据我所知,这可能是一个多项目配置问题:

如果您的解决方案中有多个项目,那么您必须将该配置文件放在使用 wcf 服务的特定项目的配置中。

假设您有 2 个项目,那么将有 2 个相应的配置文件。

于 2013-03-07T11:22:49.927 回答
0

结果发现问题根本不在 App.config 中。
事实上,同样的 App.config 在另一台机器上运行良好。
问题出在 Nunit 上。默认情况下,它使用“影子复制”设置复制临时文件夹中的所有 dll 并从那里执行二进制文件。我无法理解的是为什么它会复制 dll 而不是 .config。这毫无意义!
在我将影子副本设置为 false 后,它也开始在我的机器上工作。

PS:客户端在其他机器上工作,因为环境在 Resharper 下运行,默认情况下会关闭卷影副本。
现在有道理了!

希望这可以帮助有同样愚蠢问题的人

于 2013-03-12T07:56:26.993 回答