2011-09-12 4 views
9

私はvs2010を使用しています。シンプルなコンソールアプリケーションでは、古いasmxサービスのhttp://***/service1.asmxにサービスリファレンスを追加しようとしています。 マイコンピュータがプロキシサーバーの背後にあるので、私はエラーを取得:プロキシサーバーの背後からWebサービスリファレンスを追加

を「リモートサーバが予期しない応答が返さ:(407)プロキシ 認証が必要」

WSDLツールを使用してイムiは、プロキシサーバーのポート番号を定義することはできませんし、私は、サーバーが、examle 10.0.0.3:80のため、応答しませんでしたが、私は8080ポートを指定する必要はありませんメッセージが表示されますどうやって。どのように私は参照を作成することができますか?参照の追加

答えて

7

Web参照を追加するとき、プロキシアドレスとサーバーのポートを指定するための以下のリンクを見てみましょう。

http://msdn.microsoft.com/en-us/library/bb628649.aspx

http://msdn.microsoft.com/en-us/library/03seed2h.aspx

右コンソールアプリケーションをクリックして、サービス参照の追加]を選択しASMX

  1. への参照を追加します。

  2. アドバンスボタンをクリックし、アドレスバーにasmxアドレスを入力します。その横にある緑色のボタンをクリックして、asmxを見つけます。

  3. 名前を付けて[add ref]をクリックします。

アップデート:Web config/app configを更新して追加してください。

<system.net> 

<defaultProxy> 
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]" bypassonlocal="True"/> 

</defaultProxy> 

</system.net> 
+0

だから私はエラーを取得操作はオブジェクトの現在の状態のために有効ではありません。 – Nikita

+0

私は自分の答えを更新しました。それが役に立ったら教えてください。 – WooHoo

+0

この設定をapp.configに追加しようとしましたが、エラーはまだ発生しています。 Web参照を追加すると、サービスの説明が表示されます。私はサービスの2つの方法にハイパーリンクする必要があります。また、私はプロキシのIEオプションを設定します。 – Nikita

3

は、あなたがこのような参照を追加していることを確認します。 "Add Service Reference"をクリックし、 "Advanced"に行き、最後に "Add Web Reference"をクリックする必要があります。

そして、次の行を追加します。

使用 port 8080については
http://***/service1.asmx 

:Webサービスの

http://***:8080/service1.asmx 

セットアッププロキシ:

をWebサービスであることを確認するにはInternet Explorer proxyを使用すると、クライアントのapのWeb Serviceオブジェクトに以下を追加できます襞付け。

webService1.Proxy = WebRequest.GetSystemWebProxy(); 

あなたはまた、手動でプロキシを設定することができます。

webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/"); 

NTLM

あなたはNTLMを使用している場合、あなたはおそらく、あなたのクライアントのデフォルトクレデンシャルを使用することを確認する必要がありますプロジェクトも同様です。 UseDefaultCredentialstrueに設定してWeb Serivceを作成するときに、これを渡すことで簡単に行うことができます。

public webService _webService = new webService() { UseDefaultCredentials = true }; 

WebサービスプロジェクトのNTLM認証を無効にすることもできます。 Project Properties -> Webの下でこれを行うことができます。このオプションをオフにすると、認証せずにWebサービスを追加できるはずです。

http://msdn.microsoft.com/en-us/library/aa378749.aspx

+0

UPD:私は私のアプリのコンソールで使用しようとして Webサービスは、匿名認証を持っています。 私のコンソールアプリケーションでは、Project Properties - > Webを見つけることができません。 – Nikita

+0

これはクライアントの下ではなくWebサービスの下にあります。 – eandersson

+0

"WebサービスプロジェクトのNTLM認証を無効にすることもできますが、これはProject Properties - > Webで行うことができます。このオプションをオフにすると、認証せずにWebサービスを追加できるはずです。 - 早くも言及したように、Webサービスには匿名認証があります。だから私は私のブラウザ経由でWebサービスのページを開くことができます。私はブラウザを使ってサービスURIを開くと、ブラウザ(ブラウザ)はユーザー名とパスワードを入力するウィンドウを表示します。プロキシサーバーの資格情報のみを提供します。 – Nikita

2

vs2010を使用してWebサービス参照を自動的に作成することはできません。 私はwsdl.exeツールを使用することを決定し、パラメータに/名前付きパラメータは、プロキシサーバーの資格情報を使用してXMLファイルを渡す

wsdl.exe http://service URI /のService1.asmx /parameters:c:\temp\wsdlparameters.xml

WSDL.exeはService1.cs(デフォルト)ファイルを生成します。私は自分のプロジェクトにこのファイルを追加し、このようにそれを使用します。私は、問題を見つけ、ほぼ50時間を費やし

WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort); 
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD"); 
Service1 service1 = new Service1(); 
service1.Proxy = wp; 
service1."YourServiceMethod"(); 
+0

最終的にそこに着いてくれてうれしい – WooHoo

+0

最後のコメントを見ましたか?IEの設定に基づいて自動的にこれを行う必要がありますか? – eandersson

+0

私はそれを構成するために他に何を設定するのか分かりません私たちのプロキシはある種のトラフィックをブロックするかもしれませんが、httpを参照を追加するのに十分だと思います。 – Nikita

26

を、ウェブ上のどこにでもこの単純な解決策を見つけることができませんでした。 Web.configファイル内の "設定" セクションの下で

は、これを追加します。

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy> 
</system.net> 

は、その後魔法のように動作します!

また、背後にあるコードからそれを行うことができます。

serviceConnection = new WebService1(); 
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); 
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials; 

は美しい!!作品。

この設定を追加HTTPSの場所から摂取する必要がある場合:

<message clientCredentialType="Certificate" algorithmSuite="Default" /> 
+2

+1 Gem!シンプルで働きました – HockeyJ

+0

メンバ 'serviceConnection.Proxy'はどのクラスに属していますか? –

+0

デフォルトのプロキシ設定を避けたかった、私は設定に あなたのアイデアや障害プロキシをコピーします –