Zdezorientowany. Pisanie aplikacji VB korzystającej z usługi internetowej. Adres URL tej usługi sieciowej zmieni się w zależności od tego, gdzie jest uruchomiona aplikacja, więc muszę go zmienić w czasie wykonywania. Widzę, że domyślnie adres URL odwołania do sieci ma ustawienie „Dynamiczne”, co oznacza, że ​​powinienem móc go zmienić w czasie wykonywania, ale jednocześnie plik app.config ma zakres ustawiony na „Aplikacja”, co oznacza jest tylko do odczytu w czasie wykonywania. Chcę użyć My.Settings.WebServiceURL = "new url", ale aby to zrobić, zakres musi być ustawiony na Użytkownika... Myślę, że. Ale jeśli tak jest, to co robi dla mnie zachowanie „Dynamiczne”? Czy ktoś może podać przykład kodu, jak mogę to zmienić w czasie wykonywania? Z góry dziękuję.

1
Jimmy D 4 sierpień 2011, 16:56
Po prostu nie mogę znaleźć odpowiedzi na to pytanie na SO, z którego korzystałem kilka miesięcy temu, robiąc to samo ... Jeśli nie ma odpowiedzi w ciągu 12 godzin, przejrzym kod, który napisałem i opublikuję odpowiedź.
 – 
Dmitry Selitskiy
5 sierpień 2011, 02:01
- Dziękuję! O dziwo nigdzie nie mogę znaleźć jasnej odpowiedzi!
 – 
Jimmy D
5 sierpień 2011, 16:28

2 odpowiedzi

Najlepsza odpowiedź

Dlaczego nie napiszesz po prostu kodu, aby zmienić usługę WebService URL z ustawienia?

oService.Url = sNewUrl

Możesz użyć wyrażenia regularnego, aby umożliwić określenie tylko głównego adresu URL, np. http://ws.test.com/ i zastosować to do każdej usługi, która wymagała przeniesienia.

1
stevehipwell 5 sierpień 2011, 17:37
Oczywiście nie wiedziałem, że własność Url istnieje, inaczej prawdopodobnie nie zamieściłbym tego pytania, prawda?
 – 
Jimmy D
5 sierpień 2011, 19:37
- Cieszę się, że to działa dla Ciebie, robimy coś podobnego w naszym kodzie produkcyjnym, ponieważ pozwala nam to dynamicznie przenosić użytkowników na inny serwer. Pamiętaj, że możesz zmienić port, jeśli jest to wymagane, używając standardowej notacji portu w adresie URL http://ws.test.com:888/test.asmx
 – 
stevehipwell
5 sierpień 2011, 19:46

Proszę bardzo, stwórz klasę, która stanie się Twoim klientem usługi sieciowej:

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

Ta implementacja umożliwia zarówno użycie ustawień domyślnych z odwołania do usługi (pierwsze przeciążenie konstruktora), jak i ustawień niestandardowych określonych w kodzie (drugie przeciążenie).

2
Dmitry Selitskiy 5 sierpień 2011, 16:48
Chciałbym znaleźć oryginalną odpowiedź na kredyt... Bardzo mi pomogło.
 – 
Dmitry Selitskiy
5 sierpień 2011, 16:49