我有一个Web服务,通过反向代理使用ssl进行基本身份验证。我已经花了很长时间才弄清楚如何使这个工作,但我仍然无法让它完全发挥作用。
如果您在浏览器https://domain.com/service.svc中输入网址,则会询问凭据,如果正确,则会显示该服务的概述页面。 所以这似乎没问题。
但是当我尝试将服务添加到Visual Studio 2010时,我收到以下错误:
元数据包含无法解析的引用: 无法识别文档格式(内容类型为'text / html; charset = utf-8')。 元数据包含无法解析的引用:'https://domain.com/service.svc'。 HTTP请求未经授权,客户端身份验证方案为“匿名”。从服务器收到的身份验证标头是“Basic realm = NTLM”。 远程服务器返回错误:(401)未经授权。 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。
这是我的web.config
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<!--<httpsTransport authenticationScheme="Basic"/>-->
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None" proxyCredentialType="Basic" realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WcfService1.PortalService" behaviorConfiguration="NorthwindBehavior">
<host>
<baseAddresses>
<add baseAddress="https://domain.com/" />
</baseAddresses>
</host>
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="WcfService1.IPortalService">
<!--<identity>
<servicePrincipalName value=""/>
</identity>-->
</endpoint>
<!--<endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="MyBinding" name="mex" contract="WcfService1.IPortalService"></endpoint>-->
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="https://domain.com/"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<!--<extensions>
<bindingElementExtensions>
<add name="httpsViaProxyTransport" type="WcfService1.HttpsViaProxyTransportElement, WcfService1"/>
</bindingElementExtensions>
</extensions>
<bindings>
<customBinding>
<binding name="UserNamePasswordSecured">
<textMessageEncoding />
<security authenticationMode="UserNameOverTransport" />
<httpsViaProxyTransport />
</binding>
</customBinding>
</bindings>-->
<behaviors>
<serviceBehaviors>
<behavior name="NorthwindBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
<serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/></serviceCredentials>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="SampleEndpointBehavior">
<!--<wsdlExtensions location="http://domain.com/PortalService.svc" singleFile="true"/> -->
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
我尝试过很多内容,比如关注这篇文章:http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/但不是很成功。
我还尝试将网站绑定添加到http,因为wsdl正在生成服务器名称而不是域名,所以也许在那一端也有问题......
所以希望有人可以给我一些指示!
请注意,web.config文件中有一些“垃圾”,因为尝试了数百万种不同的设置...