实现通过 SSL 使用 Web 服务的 C# 客户端?

2024-04-09

因此,我将 ServiceReference 添加到 C# 控制台应用程序中,该应用程序调用从 Oracle 公开的 Web 服务。

我已经完成了所有设置,当它不使用 SSL (http) 时,它的工作方式就像桃子一样。我现在尝试使用 SSL 进行设置,但在将其添加到服务引用(甚至 Web 引用)时遇到了问题。例如,当我尝试将服务所公开的 URL (https) 添加到 Visual Studio 中时,它不会返回适当的 Web 方法。

底层连接已关闭:发送时发生意外错误。 从传输流接收到意外的 EOF 或 0 字节。 元数据包含无法解析的引用:'https://srs204.mywebsite.ca:7776/SomeDirectory/MyWebService?WSDL https://srs204.mywebsite.ca:7776/SomeDirectory/MyWebService?WSDL'

我遇到的另一个难题是证书管理和部署。我有大约 1000 个外部客户端站点需要使用这个小实用程序,并且它们需要将证书安装在适当的证书存储中才能连接到 Web 服务。不确定处理这个问题的最佳方法。它们需要位于根存储中吗?

我在网上花了相当多的时间查看各种选项,但在任何地方都找不到一个好的、干净的答案。

总而言之,我有几个问题:

1) 有人有一些关于在 Visual Studio 中设置使用 SSL 的 Web 服务的好链接吗?

2) 我该如何注册证书?它应该存在于哪个商店?我可以使用 CertMgr 之类的东西来注册它吗?

一定有一本好书/教程/任何可以向我展示设置此类内容的常见良好实践的东西。我只是似乎找不到它!


嗯,我已经弄清楚了。我花了比我想谈论的时间更长的时间,但我想分享我的解决方案,因为看到这个标准是我非常讨厌的。 “哦,我修好了!谢谢!”帖子让每个人都对实际发生的事情抱有疑问。

So.

根本问题是,默认情况下 Visual Studio 2008 使用 TLS 进行 SSL 握手,而我尝试连接的基于 Oracle/Java 的 Web 服务使用的是 SSL3。

当您在 Visual Studio 2008 中使用“添加服务引用...”时,您已经无法指定安全协议 http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/37c376a3-f50c-4b57-a1df-83dc43fcddbf对于服务点管理器应该是 SSL3。

Unless.

您获取一个静态 WSDL 文档并使用wsdl.exe生成代理类 http://gsraj.tripod.com/dotnet/webservices/webservice_csharp_client.html.

wsdl /l:CS /protocol:SOAP /namespace:MyNamespace MyWebService.wsdl

然后您可以使用C 夏普编译器 http://msdn.microsoft.com/en-us/library/1700bbwd(VS.80).aspx将该代理类转换为库 (.dll) 并将其添加到您的 .Net 项目“参考”中。

csc /t:library /r:System.Web.Services.dll /r:System.Xml.dll MyWebService.cs

此时,您还需要确保您的“参考”中也包含了 System.Web.Services。

现在您应该能够调用您的 Web 服务,而代码不会出现问题。为了做到这一点work在实例化服务之前,您需要添加一行神奇的代码。

// We're using SSL here and not TLS. Without this line, nothing workie.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

好吧,我对自己印象非常深刻,因为在我的开发盒上进行的测试非常棒。然后我部署到另一个客户端盒子,由于权限/权限问题,它不会再次连接。对我来说,这闻起来像证书(不管它们闻起来像什么)。为了解决这个问题,我使用 certmgr.exe http://msdn.microsoft.com/en-us/library/aa388161(VS.85).aspx将站点的证书注册到本地计算机上的受信任根。

certmgr -add -c "c:\someDir\yourCert.cer" -s -r localMachine root

这允许我将证书分发到我们的客户端站点并自动为用户安装。我仍然不确定不同版本的 Windows 在像这样的自动证书注册方面有多“安全友好”,但到目前为止效果很好。

希望这个答案对一些人有帮助。也感谢 Blowdart 在这方面提供的所有帮助并提供了一些见解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现通过 SSL 使用 Web 服务的 C# 客户端? 的相关文章

  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 为什么 appcmd.exe 解锁配置在 Azure 模拟器上不起作用?

    我最近升级到 Azure 2 1 SDK 现在我的部分功能遇到了问题web config在计算模拟器上运行时处于 Web 角色中 我的web config包含这个
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐