2015-03-26 4 views
0

У меня есть класс, в котором переменная конечная точка должна быть глобальным (для других подпрограмм и функций в классе):Как условно установить ServiceModel.EndpointAddress URI во время выполнения

Public Class MyFirstVbNetClassEver 
    Dim testEndpoint As New ServiceModel.EndpointAddress("https://test.my.employer.com/ws/soap?wsdl") 
    Dim productionEndpoint As New ServiceModel.EndpointAddress("https://my.employer.com/ws/soap?wsdl") 

    Public Sub Run() 
     If (PRDOCUTION) Then 
      Dim endpoint As New ServiceModel.EndpointAddress(productionEndpoint) 
     Else 
      Dim endpoint As New ServiceModel.EndpointAddress(testEndpoint) 
     End If 
    End Sub 
End Class 

Проблема заключается в том, что ServiceModel. EndpointAddress не имеет конструктора, который принимает параметр своего типа (т. Е. «Конструктор копирования»).

И не имеет конструктора по умолчанию, который позволяет позже установить URI.

Каков правильный способ достижения того, что я хочу делать в VB.NET?

ответ

1

Просто не создавайте новый. Используйте один у вас уже есть:

Public Sub Run() 
    Dim endpoint As ServiceModel.EndpointAddress = Nothing 
    If (PRDOCUTION) Then 
     endpoint = productionEndpoint 
    Else 
     endpoint = testEndpoint 
    End If 
    ' ... 
End Sub 

В качестве альтернативы, вы можете сохранить два оконечных адреса в виде строки, а не как EndpointAddress объектов:

Public Class MyFirstVbNetClassEver 
    Dim testUri As String = "https://test.my.employer.com/ws/soap?wsdl" 
    Dim productionUri As String = "https://my.employer.com/ws/soap?wsdl" 

    Public Sub Run() 
     If (PRDOCUTION) Then 
      Dim endpoint As New ServiceModel.EndpointAddress(productionUri) 
     Else 
      Dim endpoint As New ServiceModel.EndpointAddress(testUri) 
     End If 
    End Sub 
End Class 
+0

Ваш первый подход, что я просто попытался и, кажется, работает. Однако синтаксис, который вы опубликовали, не будет компилироваться как есть, поскольку ServiceModel.EndpointAddress не принимает '='. Мое обходное решение состоит в том, чтобы объявить «Dim endpoint» без каких-либо изменений после него. Он работает, но компилятор выдает предупреждение * «Объявление переменной без предложения« As », тип предполагаемого объекта. * – Withheld

+0

Ваш второй подход работает на C#, Java и C++, но не в VB.NET :) – Withheld

+1

Почему вы Скажем, он не будет работать в VB.NET? Оба примера работают нормально. –

Смежные вопросы