获取HTTPS使用basicHttpBinding的

问题描述:

当我使用WCF4并在遇到问题时得到一个服务工作通过HTTPS获取HTTPS使用basicHttpBinding的

我已创建一个WCF服务,并部署到服务器,它是通过HTTP工作确定工作。只要我将web.config端点地址更改为https,我就会收到错误

服务'NS.WebWCF.BusinessV1'没有应用程序(非基础设施)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到匹配服务名称的服务元素,或者因为服务元素中没有定义端点。

我的web.config看起来像

<services> 
    <service name="NS.WebWCF.Business_v1"> 
    <endpoint address="https://mydomain.com/business/v1/BusinessV1.svc" binding="basicHttpBinding" bindingConfiguration="" contract="NS.WebWCF.IBusinessV1" listenUri="/" isSystemEndpoint="true"> 
    </endpoint> 
    </service> 

我已经把我的IIS以要求SSL。但是我得到了上述错误。

我需要做些什么才能让https工作?

您需要为SSL设置IIS主机头绑定。较旧版本的IIS要求通过命令行界面设置此版本,而后期版本通过GUI提供此工具。

  • 对于IIS6,请检查here
  • 对于IIS7,请检查here
  • 对于IIS7.5,您应该可以简单地编辑UI的“绑定”部分中的值。

无论采用哪种方式,都可以验证主机头是否被占用,因为浏览器中.SVC文件生成的HTML会发生变化。

当通过HTTPS访问://之前的绑定是正确的,它可能读这样的事:

为了测试这项服务,则需要 创建一个客户端,并使用它来调用 服务。您可以使用命令行 以下语法的 svcutil.exe的工具做到这一点:

svcutil.exe https://AppServerWitHIIS/VirtualDirectory/Your.svc?WSDL

绑定之后被正确地建立在IIS中,它会读取:

要测试此服务,您将需要 创建一个客户端并使用它来调用 服务。你可以用 svcutil来做到这一点。在命令行 EXE工具的语法如下:

svcutil.exe https://www.yoursslcertsite.com/your.svc?WSDL

+0

嗨内特,是的,我已经设置了SSL正确,因为我能够通过HTTPS访问一个测试HTML页确定。 我没有安装在prod服务器上,所以不知道如何运行svcutil工具 – 2011-05-23 03:37:26

+0

您是否正面设置了SSL主机头绑定?即使使用不正确的ssl头文件,当您在浏览器中访问时,该站点仍可见,但当服务试图发送数据时,它最终会指向错误的端点。 – Nate 2011-05-23 04:22:57

+0

您可能需要修改现有的SSL绑定,而不是添加它。虽然这很危险,但最简单的方法是修改ApplicationHost.config:http://learn.iis.net/page.aspx/124/introduction-to-applicationhostconfig/ – 2011-07-21 00:34:44

试试这个:

<system.serviceModel> 
    <bindings > 

    <webHttpBinding> 
     <binding name="webBinding"> 
     <security mode="Transport"> 
     </security> 
     </binding> 
    </webHttpBinding> 

    </bindings> 

    <services> 
    <service ...> 
     <endpoint bindingConfiguration="webBinding" .../> 
    </service> 
    </services> 

</system.serviceModel> 
+1

我有类似的问题,不同的错误消息和解决的办法是将安全模式设置为Transport,因为我试图使用Https。 – 2011-07-06 21:50:59

+2

我发现这有帮助:http://blog.adnanmasood.com/2008/07/16/https-with-basichttpbinding-note-to-self/ - 虽然在我的情况只是改变'mode =“运输”'做了招。 – 2013-03-26 16:22:38

我是在一个类似的场景,我删除了HTTP绑定,并只留下IIS中的HTTPS绑定。该网站立即停止与上述错误工作。 要解决,在web.config中添加system.servicemodel内的下列

<protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https"/> 
    </protocolMapping>