2015-04-07 85 views
0

我有一个解决方案,其中包含一个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有同样的问题。

回答

0

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

0

您有合同不匹配。

您的服务器已为此合同进行设置;

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

您的客户端的端点是设置为合同还有

contract="ImsService.IImsDataContract" 

这些都需要相匹配。

+0

ImsService.IImsDataContract是我添加服务引用时在自动生成的代码中创建的协定的副本。当我运行它时似乎有效。几乎只要我发布这个问题,我就找到了我刚发布的解决方案。不管怎么说,还是要谢谢你。 – wwarby