我已经尝试了一切,但似乎无法解决这个问题,只有一个客户端在公司代理/防火墙后面发生了此问题。我们的Silverlight应用程序连接到Amazon S3以下载/上传一些文档。在仅有的一个客户端上,它返回一个407错误,之后该应用程序无法保存任何东西。
我们在另一个客户那里遇到了类似的问题,但这更多是CORS问题。为了解决这个问题,我使用了CloudFront来模拟子域名,然后访问S3存储桶,这解决了这个问题。我希望它也可以解决这个客户的问题,但事实并非如此。
我尝试将此代码添加到web.config中,这是很多答案建议的方法。
银光代码引用了2个服务。其中一个是我们的WCF服务,用于检索应用程序的所有数据。另一个是使用亚马逊Soap API的亚马逊S3服务,其终端节点位于http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl?
如果我进入我们的应用程序并仅使用不对亚马逊S3 api进行任何调用的系统部分,则应用程序可以正常工作。但是,一旦我进入需要调用S3的系统部分,问题就开始出现。有趣的是,对S3的调用很好,我可以正常检索文档,但随后对我们的WCF服务的任何调用都会返回407。
有什么想法吗?
现在,为了理解clienthttp和browserhttp之间的区别以及何时使用它们。还有切换到browserhttp可能带来的潜在影响/问题。
有没有一种方法可以请求浏览器以信任模式运行您的浏览器内Silverlight应用程序,这样做是否有助于绕过此问题?
Inner Exception:
System.ServiceModel.ProtocolException: [UnexpectedHttpResponseCode]
Arguments: 407,Proxy Authentication Required
我们在另一个客户那里遇到了类似的问题,但这更多是CORS问题。为了解决这个问题,我使用了CloudFront来模拟子域名,然后访问S3存储桶,这解决了这个问题。我希望它也可以解决这个客户的问题,但事实并非如此。
我尝试将此代码添加到web.config中,这是很多答案建议的方法。
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
我已经阅读了关于如何使用用户名和密码通过代理头传递基本认证的文章,但我不确定这对我们有什么帮助。代理服务器由客户端使用,它需要的任何身份验证都在我们的域之外。
**Additional Information**
银光代码引用了2个服务。其中一个是我们的WCF服务,用于检索应用程序的所有数据。另一个是使用亚马逊Soap API的亚马逊S3服务,其终端节点位于http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl?
如果我进入我们的应用程序并仅使用不对亚马逊S3 api进行任何调用的系统部分,则应用程序可以正常工作。但是,一旦我进入需要调用S3的系统部分,问题就开始出现。有趣的是,对S3的调用很好,我可以正常检索文档,但随后对我们的WCF服务的任何调用都会返回407。
有什么想法吗?
**Update 2**
根据Elliot Nelson的评论,我检查了我们应用程序中用于发出http请求的堆栈。结果发现我们默认使用客户端http来处理http和https请求。以下是我们在App.xaml构造函数中的代码:
public App()
{
Startup += Application_Startup;
UnhandledException += Application_UnhandledException;
InitializeComponent();
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
}
现在,为了理解clienthttp和browserhttp之间的区别以及何时使用它们。还有切换到browserhttp可能带来的潜在影响/问题。
**Update 3**
有没有一种方法可以请求浏览器以信任模式运行您的浏览器内Silverlight应用程序,这样做是否有助于绕过此问题?