2010-09-21 17 views
1

我有一些包装了PayflowPro .NET API的代码。它本质上是从C#发布到HTTPS地址(支付网关)。我可以在本地运行此代码,并且它可以很好地工作。我可以在我的MSUnit测试中运行它,它可以工作,并且可以从我的测试环境中的控制台应用程序运行它,并且它也可以运行。通过HTTPS从IIS进程发布的问题(WCF&WF)

我有一个在IIS 6.1中托管的工作流,它实例化一个类,然后调用此代码。当此工作流程启动时,代码每次都会失败;我收到来自API对象的错误,如System.Exception: Failed to connect to host Input Server Uri = https://pilot-payflowpro.paypal.com/

这个异常来自API,但我完全失去了如何从控制台应用程序成功发布但不能从IIS进程发布的问题。

  • 这个班完全一样,一个字一个字。
  • 我以管理员身份登录,所以控制台应用程序以管理员身份运行。因此,我曾尝试使用该网站的应用程序池的管理员帐户(显然,只进行此测试)
  • 控制台应用程序可以发布,因此防火墙/代理不干扰...对不对?

我需要在IIS中调整以允许应用程序在外部进行通信吗?是否有任何明显的安全设置,我忽略?任何有关运行测试用例以了解可能发生的情况的建议?

编辑:原来,这个问题与运行服务器的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)

您可能还需要编辑C:\WINDOWS\Microsoft.NET\Framework64版本这些如果你在64位Windows上运行。

向下滚动到<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"

服务器运行在低信任度以下的可能性极小。

找到<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"/> 
+0

这是一个很好的,彻底的答案 - 但我看到“'所以我不能追求它。 – 2010-09-23 00:07:42

+0

@kirk - 真遗憾。我不知道PayFlow服务,所以我都没有想法。 :( – Kev 2010-09-23 07:52:47