WCF服务参考无法通过HTTPS更新

时间:2016-01-10 18:19:34

标签: .net visual-studio web-services wcf https

我已经在IIS下运行了一些WCF服务(由WinForms应用程序使用)一段时间没有问题。我只是要重新访问它们并添加一些新功能,现在我遇到了一个问题,当我尝试在Visual Studio中更新服务引用时,这个问题首先变得明显。

右键单击现有的Service Reference,然后在Visual Studio中更新服务引用会引发错误:

  

下载' https://www.test.com/WCF/MyService.svc'时出错。请求失败,HTTP状态为400:错误请求。元数据包含无法解析的引用:(etc ...)

如果我在网络浏览器中打开https://www.test.com/WCF/MyService.svchttps://www.test.com/WCF/MyService.svc?wsdl,我也会收到400错误请求。 HOWEVER ,如果我通过http(而不是https)访问其中任何一个网址,那么我会获得服务屏幕和wsdl。然后我在VS中请求服务更新时尝试使用http,它可以工作,但是这个服务应该只使用HTTPS!

这是我的服务器端web.config

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" 
            multipleSiteBindingsEnabled="false" 
            minFreeMemoryPercentageToActivateService="0"/>
    <bindings>
        <wsHttpBinding>
            <binding name="wsHttpBindingConfig" 
                 receiveTimeout="00:05:00" sendTimeout="00:01:00" 
                 maxReceivedMessageSize="5000000">
                <security mode="TransportWithMessageCredential">
                    <transport clientCredentialType="None"/>
                    <message clientCredentialType="UserName"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <services>
        <service name="MyService"
                 behaviorConfiguration="ServiceBehavior" >
            <endpoint name="MyServiceEndpoint" 
                address="https://www.test.com/WCF/MyService.svc" 
                binding="wsHttpBinding" 
                bindingConfiguration="wsHttpBindingConfig" 
                contract="IMyService"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
                <serviceCredentials>
                    <userNameAuthentication 
                         userNamePasswordValidationMode="MembershipProvider" 
                         membershipProviderName="AspNetSqlMembershipProvider"/>
                </serviceCredentials>
                <serviceAuthorization 
                     principalPermissionMode="UseAspNetRoles" 
                     roleProviderName="AspNetSqlRoleProvider"/>
            </behavior>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <!-- enables WCF logging -->
    <diagnostics wmiProviderEnabled="false" performanceCounters="Off">
        <messageLogging logEntireMessage="true" 
              logMalformedMessages="true" logMessagesAtServiceLevel="true" 
              logMessagesAtTransportLevel="true" maxMessagesToLog="200" 
              maxSizeOfMessageToLog="50000"/>
    </diagnostics>
</system.serviceModel>

一些可能有用的背景信息(?):

  1. 刚刚在我的开发机器上升级到Win10和VS2015。尝试在VS2010或VS2015中更新服务引用会得到相同的结果。

  2. 刚刚意识到我的网络托管公司没有向服务器应用更新,就像我付钱给他们一样。刚刚为我值得信赖的旧Win2008服务器做了4年(!)的Windows更新。

  3. Chrome抱怨我的服务器证书有效但过时(使用SHA1),其他浏览器不会抱怨。我在途中获得了SHA2证书,但不知道这应该如何产生任何影响。

  4. 最后,Web服务现在仍然通过HTTPS以其原始容量运行。但是,任何通过HTTPS更新引用的尝试都会因400 Bad Request而失败。

    两天的谷歌/ stackoverflow搜索,我无法想出任何东西。任何人都有提示或线索或尝试的东西?

1 个答案:

答案 0 :(得分:0)

我不知道发生了什么,但我之前可以通过HTTPS更新引用,现在我不能。我想我很担心,因为我认为这会影响我的app.config中端点的“自动配置”。但是,通过HTTP更新服务引用似乎对我的app.config设置没有影响(通过HTTPS访问服务)。

换句话说,没有任何问题。我刚刚通过HTTP更新,我的WinForms应用程序仍然可以通过HTTPS调用该服务没问题。