我已经在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.svc
或https://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>
一些可能有用的背景信息(?):
刚刚在我的开发机器上升级到Win10和VS2015。尝试在VS2010或VS2015中更新服务引用会得到相同的结果。
刚刚意识到我的网络托管公司没有向服务器应用更新,就像我付钱给他们一样。刚刚为我值得信赖的旧Win2008服务器做了4年(!)的Windows更新。
Chrome抱怨我的服务器证书有效但过时(使用SHA1),其他浏览器不会抱怨。我在途中获得了SHA2证书,但不知道这应该如何产生任何影响。
最后,Web服务现在仍然通过HTTPS以其原始容量运行。但是,任何通过HTTPS更新引用的尝试都会因400 Bad Request而失败。
两天的谷歌/ stackoverflow搜索,我无法想出任何东西。任何人都有提示或线索或尝试的东西?
答案 0 :(得分:0)
我不知道发生了什么,但我之前可以通过HTTPS更新引用,现在我不能。我想我很担心,因为我认为这会影响我的app.config中端点的“自动配置”。但是,通过HTTP更新服务引用似乎对我的app.config设置没有影响(通过HTTPS访问服务)。
换句话说,没有任何问题。我刚刚通过HTTP更新,我的WinForms应用程序仍然可以通过HTTPS调用该服务没问题。