2011-02-04 8 views
2

私は2つのWebリクエストを同じURLに送信する必要があるアプリケーションを持っていますが、異なるソースIPエンドポイントから送信します。ServicePointはローカルのIPエンドポイントに対して一意ではありません

Dim myWebRequest As Net.HttpWebRequest = Net.WebRequest.Create(MyUrl) 
myWebRequest.ServicePoint.BindIPEndPointDelegate = MyBindIPEndPointFunction 

デリゲート関数MyBindIPEndPointFunctionが呼ばれ、私はそれが正しいIPEndpoint、すべてが正常に動作与える:

この

は、次のような何かを実行して最初の接続で十分に簡単に行うことができます。

しかし、2番目のリクエストでは、このURLのServicePointが既に存在するため、デリゲート関数MyBindIPEndPointFunctionが呼び出されないため、別のIPEndpointにバインドする2番目のWebリクエストを伝える方法がありません。

WebリクエストがSSLであるため、SSLを処理する必要があるだけでNet.TcpClientオブジェクトを使用するのは簡単ではありません。

理想的には、HttpWebRequestを通常の接続を作成して終了したら、ServicePointを使用せずにこれを閉じることができますか?また、スレッドセーフでノンブロッキングであるため、多くのスレッド(現在はすべて同じServicePointを使用しています)でリクエストを実行できます。

ありがとうございました。

答えて

1

はちょうどあなたがしなかった場合、私はpotentional答えを追加すると考えました、私はこの質問は少し古いですけど、常にコードであなたのエンドポイントを設定し、ちょうど別の変数名と同じURL

Private binding1 As New BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly) 
    Private binding2 As New BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly) 
Private WithEvents _Misc1 As Service_Misc.Misc_CallsClient = New Misc_CallsClient(binding1, New EndpointAddress("http://localhost:61928/Misc_Calls.svc")) 
Private WithEvents _Misc2 As Service_Misc.Misc_CallsClient = New Misc_CallsClient(binding2, New EndpointAddress("http://localhost:61928/Misc_Calls.svc")) 
+0

と2を作成することができますまだ解決策を見つける – Jim

+0

返信Jimに感謝します。最後に、私はTCPClientを書いて、SSLStreamオブジェクトを使用しました(私は存在しませんでした)、私は何か動作しています。あなたのアイデアは面白く見えます。 – Panafe

+0

問題ありません。将来的に役立つことを願っています。 – Jim