2

几个月前,我在 VB.Net 中编写了一个访问 Cold Fusion Web 服务的应用程序。Web 服务(位于云上的 CF 服务器上)在我的 VB.Net 项目中设置为 Web 参考。当我在运行 Windows Server 2003 的系统上执行构建的应用程序时,无论使用此 Web 服务都没有问题。

快进到今天。我正在尝试使用相同的网络/连接在相邻的 Win7 计算机上使用此 Web 服务,并且每次我在 VS2010 IDE 中或作为构建的应用程序运行该应用程序时,它都会给我一个错误:“底层连接已关闭:连接意外关闭。”

我没有对 Web 服务或 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 防火墙,但这没有任何效果。

4

1 回答 1

0

不太确定,但是我会尝试添加一些代码权限,查找基于角色的安全性,并确保您的应用程序具有代码中的所有权限来访问服务器。

使用GenericIdentityGenericPricipal关键字。

这是一些示例代码

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

您可以设置它,使其将您视为管理员,然后您需要做的就是告诉您的服务器您定义的角色允许访问 Web 服务。

如果您已通过身份验证,最后一段代码是调用 Web 服务

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

不确定这是否有帮助,但值得一试

于 2013-08-14T20:52:11.020 回答