2

我有一个使用 clickonce 部署的 WCF 应用程序。它使用 https 连接到我的服务器,一切正常

由于以下代码,我在需要时使用默认代理:

  <configSections>
    <sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </sectionGroup>
  </configSections>
  <system.net>
    <defaultProxy useDefaultCredentials="true"/>
  </system.net>

在完全信任模式下,一切正常

现在,如果我将我的安全设置设置为部分信任,如果不涉及代理,它确实可以正常工作,但如果我尝试在公司环境中启动我的软件,则不再自动检测到代理。

据我了解:

configSections 不再在部分信任环境中解析,除非设置了 requirePermission 属性,如下所示:

<section requirePermission="false" name="defaultProxy">

设置此属性会引发带有以下错误消息的 System.Configuration.ConfigurationException:

部分或组名称“defaultProxy”已定义。对此的更新可能只发生在定义它的配置级别。

'defaultproxy' 部分确实已经在 machine.config 文件中定义:

   <section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

但是,只要未设置 requirePermission,这似乎不是问题。换句话说,错误消息似乎应该改为:

部分或组名 'defaultProxy' 已使用另一个 requirePermission 设置定义。对此的更新可能只发生在定义它的配置级别。


有人遇到同样的问题吗?是否可以在部分信任模式下静默使用 WCF 应用程序中的默认代理?我也尝试以编程方式设置代理,但没有成功

System.Net.WebProxy proxy = new WebProxy();
proxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = proxy;

wshttpbinding 的 useDefaultWebProxy 属性从一开始就直接设置,但在部分或完全信任环境中,如果没有正确定义 'system.net.defaultProxy' 部分,似乎不起作用:

   <binding name="WebBinding" useDefaultWebProxy="true">

我想我可以要求我的客户更新他们的本地 machine.config 文件以添加所需的 defaultProxy useDefaultCredentials="true",但这绝对不会简化部署。

4

2 回答 2

1

我相信这是一个已知问题,可能与私钥传输有关。这里有一个 MS Connect 条目:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=354646

我希望我已经正确理解了这个问题。如果您的问题是这个错误的结果,那么看起来目前还没有 ETA 修复。但是,可能存在与手动请求凭据相关的解决方法。显然这并不理想,但它可能会在您部署到生产系统之前为您提供另一种选择。

MSDN 论坛上还有其他讨论:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c19b726b-573b-4157-91fd-051724f04180/

于 2009-03-06T07:59:36.980 回答
1

或者,如果在公司环境中工作,您可以尝试找到所需的权限以使您的应用程序正常工作。所以不是完全信任,而是更具体的代码访问安全策略。然后通过在企业级别/用户级别设置的组策略设置该策略。

于 2009-03-06T08:39:34.247 回答