我有一个包含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,它有同样的问题。
答案 0 :(得分:0)
您的合约不匹配。
您的服务器已为此合约设置;
contract="Hca.Ims.DataAccess.DataContracts.IImsDataContract"
您的客户端端点已设置为另一个合同
contract="ImsService.IImsDataContract"
这些需要匹配。
答案 1 :(得分:0)
解决了它。我曾尝试在端点地址中使用相对路径。它们不起作用。将完整的URL放入web.config端点地址后,就可以了。