我有一个解决方案,其中包含一个WCF Web服务项目和一个WPF客户端项目,可以在本地正常工作。我有一个专用的IIS Web服务器,我已经部署了WCF Web服务项目。 IIS站点配置有SSL证书,并且设置为需要SSL。该站点具有HTTPS绑定,绑定到默认端口上的特定DNS主机名和所有IP地址(只有一个)。WCF Web服务客户端抛出404 EndPointNotFoundException
我可以在服务器或客户端的浏览器中访问端点地址和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(如果存在)。
内部异常: “远程服务器返回错误:(404)未找到。”
任何人都可以看到我做错了什么吗?顺便说一句,我开始与一个basicHttpsBinding有同样的问题。
ImsService.IImsDataContract是我添加服务引用时在自动生成的代码中创建的协定的副本。当我运行它时似乎有效。几乎只要我发布这个问题,我就找到了我刚发布的解决方案。不管怎么说,还是要谢谢你。 – wwarby