2

谁能指出我如何将 SSL 客户端证书与 Silverlight 一起使用来访问宁静的 Web 服务的正确方向?

我似乎找不到有关如何处理它们的任何信息,甚至找不到它们是否受支持。

干杯。

4

4 回答 4

1

这取决于您使用的是浏览器 HTTP 堆栈还是客户端 HTTP 堆栈。客户端堆栈不支持客户端证书,期间。如果您愿意忍受它的其他限制(缺乏对所有 HTTP 动词的支持、响应状态代码的强制等),浏览器堆栈就会这样做,而且几乎是自动的。

但是,我在 OOB 场景中使用带有客户端证书的浏览器堆栈时遇到了问题。在这些情况下,Prism 模块加载失败 - 请求到达 IIS,但无缘无故导致 500 服务器错误。如果我将 IIS 设置为忽略客户端证书,或者如果我在浏览器中运行应用程序,它可以正常工作:-/

于 2010-07-08T03:55:32.113 回答
1

Slipjig 提到了这一点:

“如果你愿意忍受它的其他限制(缺乏对所有 HTTP 动词的支持、响应状态代码的强制等),浏览器堆栈就会这样做,而且几乎是自动的。”

如果您可以接受,请查看 Microsoft 自己如何在其某些 API 中使用自定义 X-HTTP-Method 标头处理此问题,例如他们如何为 WCF 和 OData 处理此问题:

http://www.odata.org/developers/protocols/operations

在 MSDN 中,Microsoft 还提到了将 REST 与 SharePoint 2010 的基于 WCF 的 REST API 结合使用:

msdn.microsoft.com/en-us/library/ff798339.aspx

“实际上,许多防火墙和其他网络中介会阻止 GET 和 POST 以外的 HTTP 动词。为了解决这个问题,WCF 数据服务(和 OData 标准)支持一种称为“动词隧道”的技术。在这种技术中,PUT, DELETE 和 MERGE 请求作为 POST 请求提交,并且 X-HTTP-Method 标头指定接收者应应用于请求的实际动词。有关详细信息,请参阅 MSDN 和 OData 上的 X-HTTP-Method:操作( OData 网站上的方法隧道通过 POST 部分)。

Don Box 对此也发表了一些看法,但特别是关于 GData:

www.pluralsight-training.net/community/blogs/dbox/archive/2007/01/16/45725.aspx

“如果我正在构建一个 GData 客户端,我真的想知道为什么我会费心使用 DELETE 和 PUT 方法,因为 X-HTTP-Method-Override 将在更多情况/部署中工作。”

有一篇关于 Silverlight 和 Java 互操作的文章也通过给出相同的建议解决了 Silverlight 的这个限制:

www.infoq.com/articles/silverlight-java-interop

“Silverlight 仅支持 GET 和 POST HTTP 方法。一些防火墙限制使用 PUT 和 DELETE HTTP 方法。

需要指出的是,只有使用 GET 和 POST HTTP 方法才能创建真正的 RESTful 服务(符合上面列出的所有 REST 原则),换句话说,REST 架构不需要到 HTTP 的特定映射。Google 的 GData X-Http-Method-Override 标头就是这种方法的一个示例。

如果 Web 服务在 POST 上解释 X-HTTP-Method-Override 标头,则可以在标头中设置以下 HTTP 方法覆盖以完成 PUT 和 DELETE 操作:

* X-HTTP-Method-Override: PUT
* X-HTTP-Method-Override: DELETE"

希望这会有所帮助-乔希

于 2010-10-12T17:50:25.300 回答
0

看看这个。

http://support.microsoft.com/kb/307267

只需将您的网址更改为 https

希望这可以帮助

于 2010-07-06T08:23:39.847 回答
0
Dim url As Uri = New Uri(Application.Current.Host.Source, "../WebService.asmx")
Dim binding As New System.ServiceModel.BasicHttpBinding
If url.Scheme = "https" Then
    binding.Security.Mode = ServiceModel.BasicHttpSecurityMode.Transport
End If

binding.MaxBufferSize = 2147483647 'this value set to override a bug, 
binding.MaxReceivedMessageSize = 2147483647 'this value set to override a bug,
Dim proxy As New ServiceReference1.WebServiceSoapClient(binding, New ServiceModel.EndpointAddress(url))
proxy.InnerChannel.OperationTimeout = New TimeSpan(0, 10, 0)
于 2013-01-16T09:44:28.437 回答