4

我已将基于轴的 wsdl 作为服务参考导入到 VS 2008 项目中。

我需要能够传递安全详细信息(例如用户名/密码和 nonce 值)来调用基于轴的服务。

我已经考虑为 wse 做这件事,我理解这个世界讨厌(没有问题)

我对 WCF 的经验很少,但是由于 SO,我现在已经研究了如何物理调用端点,但不知道如何设置 SoapHeaders,如下面的架构所示:

<S:Envelope 
  xmlns:S="http://www.w3.org/2001/12/soap-envelope"
  xmlns:ws="http://schemas.xmlsoap.org/ws/2002/04/secext">
    <S:Header>
        <ws:Security>
            <ws:UsernameToken>
                <ws:Username>aarons</ws:Username>
                <ws:Password>snoraa</ws:Password>
            </ws:UsernameToken>
        </wsse:Security>
        •••
    </S:Header>
    •••
</S:Envelope>

非常感谢任何帮助

谢谢,马克

4

2 回答 2

4

为了调用这类服务,您通常会使用basicHttpBinding(即没有 WS-* 实现的 SOAP 1.1)或wsHttpBinding(SOAP 1.2,有 WS-* 实现)。

主要问题是正确设置所有安全参数。我有一个类似的 Web 服务(基于 Java)需要调用 - 这是我的设置和代码:

应用程序./web.config

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="SoapWithAuth" useDefaultWebProxy="false">
            <security mode="TransportCredentialOnly">
              <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
            </security>
         </binding>
      </basicHttpBinding>
   </bindings>
   <client>
    <endpoint name="SoapWithAuth"
                  address="http://yourserver:port/YourService"
                  binding="basicHttpBinding" 
                  bindingConfiguration="SoapWithAuth"
                  contract="IYourService" />
   </client>
</system.serviceModel>

然后在调用服务时在您的客户端代码中,您需要这段代码:

IYourServiceClient client = new IYourServiceClient();

client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "top-secret"; 

这些帮助有用?

于 2010-05-31T18:51:33.063 回答
0

WCF 客户端代理不支持密码摘要选项。这样做的唯一方法是自己构建 UsernameToken,然后在发送消息之前将其注入 SOAP 标头。

我有一个类似的问题,这里描述了,这应该足以帮助您解决同样的问题。

我最终为 UsernameToken 使用旧的 WSE3.0 库,而不是自己编写散列算法,然后使用自定义行为来更改 SOAP 标头。

于 2010-07-22T10:18:47.773 回答