如何连接到Web服务?

时间:2013-06-26 15:10:31

标签: c# web-services wcf-security

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

 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>

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

1 个答案:

答案 0 :(得分:0)

那么,您首先要检查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%确定用户名和密码有效且该帐户未被禁用?既然你得到了合理的回应,我敢打赌这就是问题所在。

如果它是在抱怨一些配置和错配结合,检查您的serviceclient配置(可能会在yourapp.config坐),并确保它具有binding标签内写入正确的安全类型,例如{{1 }}。但它不抱怨..

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