2013-07-11 2 views
2

Несколько месяцев назад я написал приложение в VB.Net, которое обращается к веб-службе Cold Fusion. Веб-сервис (который сидит на CF-сервере в облаке) был настроен как веб-ссылка в моем проекте VB.Net. Когда я выполняю построенное приложение в системе под управлением Windows Server 2003, у нее нет проблем с тем, что потребляет этот веб-сервис.Не удается получить доступ к веб-сервису от VB.NET

Ускоренная перемотка вперед на сегодня. Я пытаюсь использовать эту веб-службу на соседнем компьютере Win7 с использованием той же сети/соединения, и каждый раз, когда я запускаю приложение либо в VS2010 IDE, либо в качестве встроенного приложения, он вызывает ошибку: «Основное соединение было закрыто: Соединение неожиданно закрылось.

Я не внес никаких изменений ни в веб-службу, ни в код VB.Net.

Что может вызвать такую ​​ошибку?

Здесь пока мой VB.NET код, который потребляет услугу:

Public Function ConnectedToTheInternet() As Boolean 
    Dim myservice = New TestService.testservicecfc() 

    Try 
     myservice.echoString("hello") 
     ConnectedToTheInternet = True 
    Catch ex As Exception 
     Windows.Forms.MessageBox.Show(ex.Message) 
     ConnectedToTheInternet = False 
    End Try 

End Function 

и вот мой код веб-сервис:

<cfcomponent output="false"> 
    <cffunction name="echoString" returnType="string" output="no" access="remote"> 
     <cfargument name="input" type="string"> 
     <cfreturn #arguments.input#> 
    </cffunction> 
</cfcomponenet> 

Я попытался отключить мой брандмауэр Windows, но это не было эффект.

+0

Вместо того, чтобы объявить и инстанцировании переменную веб-службы в каждом методе, который его использует, я создал одну глобальную переменную веб-службы, которая создается при первом запуске приложения. Это, похоже, решило проблему. Любые другие предложения по-прежнему приветствуются. – Richard

+0

ОК. Я врал. Это все еще не работает. – Richard

ответ

0

Не совсем уверен, однако я бы попытался добавить некоторые права на код, искать защиту на основе ролей и убедиться, что ваше приложение имеет все разрешения в коде для доступа к серверу.

GenericIdentity и GenericPricipal ключевые слова.

вот несколько примеров кода

Imports System 
Imports System.Security.Principal 
Imports System.Threading 

Public Shared Sub Main() 
'Hard coded username 
Dim strUsername As String = "admin" 

'Create GenericIdentity 
Dim gidMyID as New GenericIdentity(strUsername) 
Dim strMyRole As String = "Some Role" 

'Create GenericPrincipal 
Dim gplMyPrincipal As New GenericPrincipal(MyIdentity, MyRoles) 

'Store the principal for later use 
Thread.CurrentPrincipal = gplMyPrincapal 

End Sub 

вы можете установить так, чтобы он вас видеть в качестве администратора, то все, что вам нужно сделать, это сказать вашему серверу, что роль вы определили разрешен доступ к веб-службе ,

последний бит кода для вызова веб-службы, если вы прошли проверку подлинности

if(String.Compare(gplMyPrincapal, "DOMAIN\Admin", True) = 0) Then 
    'enter code here 
Else 
    Msgbox("Cannot Connect", "Error") 
End If 

не уверен, если это поможет, но его стоит идти

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