【问题标题】:How to connect to the web service?如何连接到网络服务?
【发布时间】:2013-06-23 19:38:08
【问题描述】:

我想连接到这个地址上的网络服务: https://webapp2.rzzo.rs/rzzo/RzzoService?wsdl 我在我的 .net 4.0 C# 应用程序中添加了对它的服务引用。 这是我用来连接到这个服务的代码:

 ServiceReference1.RzzoServiceClient client = new ServiceReference1.RzzoServiceClient();
            client.ClientCredentials.UserName.UserName = "------";
            client.ClientCredentials.UserName.Password = "-------";
            bool check = client.CheckConnection();

这是我必须得到的消息(我从我的服务提供商那里得到的):

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
utility-1.0.xsd">
    <s:Header>
        <o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
secext-1.0.xsd">
            <o:UsernameToken u:Id="uuid-cdf8690a-e56a-4efa-923c-760d22b6748d-7">
                <o:Username>username</o:Username>
                <o:Password>password</o:Password>
            </o:UsernameToken>
        </o:Security>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <GetInsuranceDataF xmlns="http://service.rzzo.rs/">
            <req xmlns="">
                <lbo/>
                <zk>11111111111</zk>
            </req>
        </GetInsuranceDataF>
    </s:Body>
</s:Envelope>

但我无法连接到服务。 请帮忙

【问题讨论】:

  • 您遇到的错误是什么?
  • 这里是错误:“用户名密码令牌的身份验证失败”..

标签: c# web-services wcf-security


【解决方案1】:

好吧,您首先要检查 WSDL 和/或服务文档以了解需要什么身份验证。

WSDL 建议“WSS11”“sp:SignedEncryptedSupportingTokens”,幸运的是证书要求似乎已关闭。

MSDN 知道这个方案:http://msdn.microsoft.com/en-us/library/aa738565.aspx
第 3.1.1 节 UsernameOverTransport,所以应该支持。

设置用户名和密码应该很简单:

var svc = new SomethingServiceClient(); // your proxy class generated from WSDL
svc.ClientCredentials.UserName.UserName = "someUsername";
svc.ClientCredentials.UserName.Password = "somePassword";

这正是你所说的你正在尝试的,所以这很奇怪。

您是否 100% 确定用户名和密码有效并且该帐户未被禁用?既然你得到了合理的回应,我敢打赌这就是问题所在..

如果它抱怨某些配置或绑定不匹配,请检查您的服务客户端配置(可能位于 yourapp.config 中)并确保其在 binding 标记中写入了正确的安全类型,例如 &lt;security authenticationMode="UserNameOverTransport" /&gt;。但它没有抱怨..

您是否 100% 确定用户名和密码有效并且该帐户未被禁用?既然您得到了合理的回应,我敢打赌这就是问题所在。我只是惊讶地看到错误消息中的“令牌”一词。也许有一些身份验证令牌要从服务器接收,并且必须在每次身份验证尝试时传回,比如 http cookie?尝试检查服务的文档。

【讨论】:

  • 密码和用户100%有效。但是有一个限制,只能从特定的 IP 地址调用服务。
  • 当我从不允许 IP 的计算机调用服务时,我收到此错误:““用户名密码令牌的身份验证失败”,但是,当我从具有允许 IP 地址的计算机调用服务时,我已经收到此错误:“在 ServiceModel 客户端配置部分中找不到引用合同 (serviceReference1.rzzzoService) 的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与合约匹配的端点元素。”
  • (1) 很可能,如果没有一些严重的黑客攻击,您将无法通过 IP 过滤器。有关身份验证问题的错误只是通知您该失败。但是,“身份验证失败”可能会提供更多信息。请尝试让服务管理员也允许从您的第二台计算机进行连接 - 他们应该能够做到这一点。
  • (2) 错误清楚地说明了故障和可能的原因:您的EXE文件找不到服务客户端库的设置。确保您已将 myapp.exe.configmylib.dll.config 文件与您的应用程序一起复制。如果您已复制它并且它位于 .exe/dll 文件中,则检查该 .config 文件是否包含客户端配置:打开并查找 endpoint 元素。它应该类似于 msdn.microsoft.com/en-us/library/ee535060(v=office.14).aspx 如果它们丢失,请从 WSDL 重新生成代理并再次检查解决方案的 .config 文件。
  • 非常感谢,我没有复制myapp.exe.config...现在可以了。
猜你喜欢
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多