2011-08-04 5 views
1

混乱しています。 Webサービスを使用するVBアプリケーションを記述する。このWebサービスのURLは、アプリケーションの実行元に基づいて変更されるため、実行時に変更する必要があります。私はデフォルトでは、Web参照URLの動作が「動的」に設定されていることがわかります。つまり、実行時に変更できるはずですが、app.configファイルのスコープは「アプリケーション」に設定されていますそれは実行時に読み取り専用です。私はMy.Settings.WebServiceURL = "new url"を使用して探していますが、これを行うにはスコープをユーザーに設定する必要があります...私は思っています。しかし、そうであれば、私にとっては「ダイナミックな」振る舞いは何をしますか?誰かが私に実行時にこれをどのように変更できるかのコード例を教えてもらえますか?前もって感謝します。ダイナミックウェブサービスURL付きVB

+0

私は数ヶ月前に同じことをしていたので、この質問に対する答えを見つけることができません... 12時間後に回答がない場合は、私が書いたコードを見直して回答を投稿します。 –

+0

@ドミトリー - ありがとう!驚くほど私はどこにでも明確な答えを見つけることができません! –

答えて

1

WebService Urlプロパティを設定から変更するコードを書くのはなぜですか?

oService.Url = sNewUrl 

正規表現を使用すると、URLルートのみを指定できるようになります。 http://ws.test.com/とし、移動が必要なサービスに適用してください。

+0

明らかに私はUrlプロパティが存在するかどうかわからなかったし、おそらくこの質問を投稿していないだろうか? –

+0

@JJD - これはあなたのためにうまくいきました。プロダクションコードでは、ユーザーを別のサーバーに動的に移動させることができます。必要に応じて、http://ws.test.com:888/test.asmxというURLの標準ポート表記を使用してポートを変更することができます – stevehipwell

2

ここでは、あなたのWebサービスクライアントとなりますクラスを作成し、行く:

Public Class WS_ClientClass 
Private MyService As MyWebServiceSoap 

Public Sub New() 
    MyService = New MyWebServiceSoapClient 
End Sub 

Public Sub New(ByVal strHost As String, ByVal strPort As String) 
    'Set up the binding element to match the app.config settings ' 
    Dim binding = New BasicHttpBinding() 
    binding.Name = "MyWebServiceSoap" 
    binding.CloseTimeout = TimeSpan.FromMinutes(1) 
    binding.OpenTimeout = TimeSpan.FromMinutes(1) 
    binding.ReceiveTimeout = TimeSpan.FromMinutes(10) 
    binding.SendTimeout = TimeSpan.FromMinutes(1) 
    binding.AllowCookies = False 
    binding.BypassProxyOnLocal = False 
    binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard 
    binding.MaxBufferSize = 65536 
    binding.MaxBufferPoolSize = 524288 
    binding.MessageEncoding = WSMessageEncoding.Text 
    binding.TextEncoding = System.Text.Encoding.UTF8 
    binding.TransferMode = TransferMode.Buffered 
    binding.UseDefaultWebProxy = True 

    binding.ReaderQuotas.MaxDepth = 32 
    binding.ReaderQuotas.MaxStringContentLength = 8192 
    binding.ReaderQuotas.MaxArrayLength = 16384 
    binding.ReaderQuotas.MaxBytesPerRead = 4096 
    binding.ReaderQuotas.MaxNameTableCharCount = 16384 

    binding.Security.Mode = BasicHttpSecurityMode.None 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None 
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None 
    binding.Security.Transport.Realm = "" 
    binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName 
    binding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Default 

    'Define the endpoint address' 
    Dim endpointStr = "http://" & strHost & ":" & strPort & "/MyWebApp/MyWebService.asmx" 
    Dim endpoint = New EndpointAddress(endpointStr) 

    MyService = New MyWebServiceSoapClient(binding, endpoint) 
End Sub 

この実装は、両方の使用のデフォルトのサービス参照(コンストラクタの最初のオーバーロード)からの設定だけでなく、カスタムすることができますコードで指定された設定(2番目のオーバーロード)。

+0

私は信用の元の答えを見つけることができたら...助けてくれました。 –

関連する問題