4

入力中に残念な回答が見つかりました

プロキシ経由でユーザー名/パスワード認証を必要とする外部 Web サービスに接続しようとしています。Visual Studio Express 2008 を使用してサービス参照を生成しています

  • Web 参照を使用して同じ Web サービスに接続しました。完了するまでに時間がかかるため、タイムアウトを大きく設定するだけで済みました。
  • 生成されたサービス参照とプロキシ経由で取得するための設定を使用して、ユーザー名/パスワード認証を必要としない別の Web サービスに接続しました。

したがって、私の考えでは、この参照を取得し、正しい Web サービスを指し示し、認証を追加します。

セキュリティなしで使用している構成:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.net>
        <defaultProxy useDefaultCredentials="true">
          <proxy bypassonlocal="False" proxyaddress="http://***.***.****:80" />
        </defaultProxy>
      </system.net>
        <system.serviceModel>
          <bindings>
            <customBinding>
              <binding name="AreaWebServiceSoap12">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>            
                <httpTransport 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" />            
              </binding>
            </customBinding>
          </bindings>
          <client>
            <endpoint address="http://www.****.*****.****.com/samplewebservice/service.asmx"
                    binding="customBinding" bindingConfiguration="AreaWebServiceSoap12"
                    contract="ServiceReference1.ServiceSoap" name="ServiceSoap" />
            </client>
        </system.serviceModel>
    </configuration>

認証の呼び出しに次のコードを追加しました。

static void Main(string[] args)
{
  ServiceSoapClient s = new ServiceSoapClient();
  s.ClientCredentials.UserName.UserName = @"username";
  s.ClientCredentials.UserName.Password = @"password";

  Service.RawGpsData[] result = s.GetRawGpsData(0);
  Console.WriteLine(String.Format("done:{0}",result.Length));
  Console.ReadLine();
}

このセットアップを使用するだけで、予想どおりエラーが発生します。

HTTP 要求は、クライアント認証スキーム Anonymous では許可されていません。サーバーから受信した認証ヘッダーは NTLM です。

WCFを使い始めたばかりなので、道に迷ってばかげたことを試し始めました。

次のセクションを設定に追加すると

 <security authenticationMode="UserNameOverTransport"></security>

次のエラーが表示されます。

コントラクト AreaWebServiceSoap.AreaWebServices のバインディング CustomBinding.http://tempuri.org/ は、整合性と機密性を備えたトランスポート レベルが必要な検証モードで構成されます。トランスポートは完全性と機密性を提供できません。

申し訳ありませんが、この質問を入力しているときに、自分で答えを見つけました。私はまだ人々がこれに興味を持っていると思います.すべてのコメントや考えはまだ歓迎されています. だから私はここに質問を残してコミュニティにし、自分で答えを投稿します。

4

2 に答える 2

4

バインディングを:に変更します

<?xml version="1.0" encoding="utf-8" ?>
<customBinding>
            <binding name="AreaWebServiceSoap12" closeTimeout="00:01:00" openTimeout="00:10:00"
                    receiveTimeout="00:20:00" sendTimeout="00:05:00">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                  messageVersion="Soap12" writeEncoding="utf-8">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              </textMessageEncoding>              
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"  
                  maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
                  bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                  keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                  realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                  useDefaultWebProxy="true" />              
            </binding>
          </customBinding>

したがって、authenticationScheme="Ntlm"を設定します

于 2008-11-14T09:28:54.793 に答える
1

そして、プロキシなしで接続する方法は次のとおりです。

http://blog.bodurov.com/Create-a-WCF-client-for-asmx-web-service-without-using-web-proxy

于 2008-12-23T18:39:23.883 に答える