我有一些包含PayflowPro .NET API的代码。它基本上从C#发布到HTTPS地址(支付网关)。我可以在本地运行此代码,它运行良好。我可以在我的MSUnit测试中运行它并且它可以工作,我可以在我的测试环境中从控制台应用程序运行它,它也可以工作。
我有一个在IIS 6.1中托管的工作流,它实例化一个类,该类又调用此代码。启动此工作流程时,代码每次都会失败;我从API对象中收到了System.Exception: Failed to connect to host Input Server Uri = https://pilot-payflowpro.paypal.com/
之类的错误。
此异常来自API,但我完全不知道如何从控制台应用程序成功发布,而不是从IIS进程发布。
我是否需要在IIS中调整以允许应用程序在外部进行通信?我有没有明显的安全设置?有关测试用例的任何建议,以找出可能发生的情况吗?
edit:原来这个问题与服务器运行的VM环境有某种关系。我的开发盒,测试服务器或生产服务器上不会发生此问题 - 它只发生在集成服务器上。原因尚不清楚,但我不再努力了。
答案 0 :(得分:1)
这可能是由ASP.NET信任配置问题引起的。要检查信任级别,请在编辑器中打开以下文件:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config
(如果是ASP.NET 2.0)
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\CONFIG\web.config
(如果是ASP.NET 4.0)
如果您在64位Windows上运行,则可能还需要编辑这些版本的C:\WINDOWS\Microsoft.NET\Framework64
。
向下滚动到<securityPolicy>
配置部分,如下所示:
<location allowOverride="false">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
<trust level="Medium" originUrl=""/>
</system.web>
</location>
如果您看到<trust level="Full" originUrl=""/>
以外的任何内容,则表示服务器正在部分信任下运行。
打开相关.config
属性指定的policyFile
文件,例如web_mediumtrust.config
level="Medium"
。{/ p>
服务器极不可能在低于低信任度的情况下运行。
找到<NamedPermissionSets>
部分,其下方有一个<PermissionSet>
,如下所示:
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
这包含许多<IPermission>
个节点。寻找一个叫WebPermission
的人,它看起来像这样:
<IPermission
class="WebPermission"
version="1">
如果它缺失或看起来像:
<IPermission
class="WebPermission"
version="1">
<ConnectAccess>
<URI uri="$OriginHost$"/>
</ConnectAccess>
</IPermission>
您需要添加或修改,如下所示:
<IPermission
class="WebPermission"
version="1"
Unrestricted="true"/>
此设置控制应用程序与URI之间的出站和入站访问。
可能还需要确保SocketPermission
配置的配置类似:
<IPermission
class="SocketPermission"
version="1"
Unrestricted="true"/>
答案 1 :(得分:0)
事实证明,此问题与运行服务器的VM环境有某种关系。我的开发盒,测试服务器或生产服务器上不会发生此问题 - 它只发生在集成服务器上。原因尚不清楚,但我不再努力了。