WCF Web服务客户端抛出404 EndPointNotFoundException

时间:2015-04-07 10:58:25

标签: c# asp.net wcf iis binding

我有一个包含WCF Web服务项目和WPF客户端项目的解决方案,它在本地运行良好。我有一个专门的IIS Web服务器,我已经部署了WCF Web服务项目。 IIS站点配置了SSL证书,并设置为需要SSL。该站点具有HTTPS绑定,绑定到特定DNS主机名和默认端口上的所有IP地址(只有一个)。

我可以在服务器或客户端的浏览器中访问端点地址和WSDL而不会出现问题。该组织使用代理服务器,但我不认为这会妨碍客户端和服务器之间没有防火墙。

这是我在服务器上的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="DefaultBinding" maxReceivedMessageSize="1000000000">
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None">
                            <extendedProtectionPolicy policyEnforcement="Never" />
                        </transport>
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <services>
            <service name="Hca.Ims.Wcf.ImsService">
                <endpoint 
                 name="Hca.Ims.Wcf.ImsService"
                 address="/ImsService.svc"
                 binding="wsHttpBinding"
                 bindingConfiguration="DefaultBinding"
                 contract="Hca.Ims.DataAccess.DataContracts.IImsDataContract" />
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior>
                    <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <protocolMapping>
            <add binding="basicHttpsBinding" scheme="https" />
        </protocolMapping>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <directoryBrowse enabled="true" />
        <httpErrors errorMode="Detailed" />
    </system.webServer>
</configuration>

这是我的客户端app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    [...]
    <system.net>
        <defaultProxy enabled="false" />
    </system.net>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="DefaultBinding" receiveTimeout="00:30:00"
                 sendTimeout="00:30:00" maxReceivedMessageSize="1000000000">
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None" >
                            <extendedProtectionPolicy policyEnforcement="Never" />
                        </transport >
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://mydnsname/ImsService.svc" binding="wsHttpBinding"
             bindingConfiguration="DefaultBinding" contract="ImsService.IImsDataContract"
             name="Hca.Ims.Wcf.ImsService" />
        </client>
    </system.serviceModel>
</configuration>

这是一些调用代码:

var webClient = new System.Net.WebClient();
//Works
var webResult = webClient.DownloadString("https://mydnsname/ImsService.svc");

var wcfClient = new ImsDataContractClient("Hca.Ims.Wcf.ImsService");
//Crashes
var wcfResult = wcfClient.GetUserInfo("SomeUserId");

结果:

EndPointNotFoundException: 在https://mydnsname/ImsService.svc没有可以接受该消息的端点监听。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。

内部例外: &#34;远程服务器返回错误:(404)Not Found。&#34;

谁能看到我做错了什么?顺便说一句,我开始使用basicHttpsBinding,它有同样的问题。

2 个答案:

答案 0 :(得分:0)

您的合约不匹配。

您的服务器已为此合约设置;

contract="Hca.Ims.DataAccess.DataContracts.IImsDataContract"

您的客户端端点已设置为另一个合同

contract="ImsService.IImsDataContract"

这些需要匹配。

答案 1 :(得分:0)

解决了它。我曾尝试在端点地址中使用相对路径。它们不起作用。将完整的URL放入web.config端点地址后,就可以了。