gpt4 book ai didi

wcf - 如何通过 HTTPS 在 WCF 中使用 WS-Security 服务?

转载 作者:行者123 更新时间:2023-12-04 18:24:16 26 4
gpt4 key购买 nike

我正在尝试使用 WCF 使用启用 WS-Security 的服务。身份验证使用 UsernameToken 进行。我对 WCF Web 服务客户端不是很了解,但我认为下面的配置适用于常规 HTTP 通信。我(大部分)使用this guide配置它。主要区别在于我使用了 VS2010 “添加服务引用” UI 而不是命令提示符。

我的问题是我需要通过 HTTPS 执行此操作。当我使用 <security mode="Message">在我的 app.config 中,我相信我的 SOAP 信封包含所需的 WS-Security header 。我不能确定,因为我无法让日志记录工作。但是,我收到以下错误:The provided URI scheme 'https' is invalid; expected 'http'. Parameter name: via .

下面是我的 app.config 文件的内容,以及我的客户端代码示例。

<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="Omitted" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" negotiateServiceCredential="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://omitted.com/service" binding="wsHttpBinding" bindingConfiguration="Omitted" contract="Omitted.Omitted" name="Omitted" />
</client>
</system.serviceModel>


var service = new OmittedClient();
service.ClientCredentials.UserName.UserName = "username";
service.ClientCredentials.UserName.Password = "password";
var response = service.DoSomething(new DoSomethingRequest());

最佳答案

感谢 500 - Internal Server error 帮助我解决了这个问题。以下是我采取的步骤:

  • 使用 Visual Studio/WCF 生成代理。
  • 将安全模式更改为 TransportWithmessageCredential。
  • 使用以下代码指定用户名/密码。

  • var client = new WebServiceClient();
    client.ClientCredentials.UserName.UserName = "用户名";
    client.ClientCredentials.UserName.Password = "密码";
  • 如果您收到响应,但 WCF 在处理它时提示,则响应中可能缺少时间戳。如果是这种情况,请尝试修复它。

  • //WCF 提示缺少时间戳 (http://www.west-wind.com/weblog/posts/2007/Dec/09/Tracing-WCF-Messages)
    var 元素 = service.Endpoint.Binding.CreateBindingElements();
    elements.Find().IncludeTimestamp = false;
    service.Endpoint.Binding = new CustomBinding(elements);

    关于wcf - 如何通过 HTTPS 在 WCF 中使用 WS-Security 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023215/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com