1

我有一个 Web 服务,它通过反向代理使用 ssl 的基本身份验证。我已经花了相当长的时间来弄清楚如何让它工作,但我仍然无法让它完全工作。

如果您在浏览器https://domain.com/service.svc中输入 url ,它会要求您提供凭据,如果正确,您将获得服务的概述页面。所以这似乎没问题。

但是当我尝试将服务添加到 Visual Studio 2010 时,我收到以下错误:

元数据包含无法解析的引用:无法识别文档格式(内容类型为 'text/html; charset=utf-8')。元数据包含无法解析的引用:“https://domain.com/service.svc”。HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“基本领域 = NTLM”。远程服务器返回错误:(401) Unauthorized。如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

这是我的 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 文件中有一些“垃圾”......

4

0 回答 0