Вызов веб-службы ASP.NET с учетными данными клиента - PullRequest
2 голосов
/ 21 апреля 2011

Я столкнулся с ситуацией со сторонним веб-сервисом, которому мне нужно позвонить. Когда я делаю ссылку на веб-сервис, я получаю следующую конфигурацию в моем app.config:

 <system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="GetCompanyInfoSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="Transport">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </transport>
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
            <binding name="GetCompanyInfoSoap1" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </transport>
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
        <customBinding>
            <binding name="GetCompanyInfoSoap12">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>
                <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
                    maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                    realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true" requireClientCertificate="false">
                    <extendedProtectionPolicy policyEnforcement="Never" />
                </httpsTransport>
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="https://api.capitaliq.com/ciqdotnet/api/2.0/GetCompanyInfo.asmx"
            binding="basicHttpBinding" bindingConfiguration="GetCompanyInfoSoap"
            contract="GetCompanyInfoSvc.GetCompanyInfoSoap" name="GetCompanyInfoSoap" />
        <endpoint address="https://api.capitaliq.com/ciqdotnet/api/2.0/GetCompanyInfo.asmx"
            binding="customBinding" bindingConfiguration="GetCompanyInfoSoap12"
            contract="GetCompanyInfoSvc.GetCompanyInfoSoap" name="GetCompanyInfoSoap12" />
    </client>
</system.serviceModel>

Тогда я звоню в службу, используя мой стандарт. подход, как показано:

GetCompanyInfoSvc.GetCompanyInfoSoapClient p = new WindowsFormsApplication1.GetCompanyInfoSvc.GetCompanyInfoSoapClient("GetCompanyInfoSoap");
p.ClientCredentials.UserName.UserName = "cccccc";
p.ClientCredentials.UserName.Password = "ccccg";
GetCompanyInfoSvc.CompanySummary[] summ = p.GetCompanyInfo(new int[] { 18511 });

Однако вызов всегда завершается неудачно с «Требуется аутентификация», которая выглядит так, будто имя пользователя / pw не проходит. Я попробовал стандартный. подход добавить его в качестве веб-ссылки ASMX и использовать вызов:

GetCompanyInfo c = new GetCompanyInfo();
c.Credentials = new System.Net.NetworkCredential("ccccc", "cccg");
CompanyDetail[] details = c.GetCompanyDetail(new int[] { 18511 });

Это тоже не работает. Дает мне ту же ошибку "Требуется аутентификация".

Есть ли что-то, чего мне не хватает?

...