1

Webサービスにログインした後、Cookieを取り戻すのに問題があります。接続でき、ログインが成功したことを確認できます(infoservice.LoginToVault)。しかし、接続されているかどうかを確認しようとすると(infoservice.IsConnectedToVault)、falseが返されます。

その理由は、Cookieが保存されていないためだとわかりました。だから私はcookiecontainerを使ってみましたが、何かが間違ったトラックだと教えてくれます。ログイン時にcookieを要求する必要があると思いますが、どうすればよいですか?

どんな助けでもいただければ幸いです!

        InfoService infoservice = new InfoService(); // that's the webservice

        bool login = infoservice.LoginToVault("server", "vault", "user", "pass");
        bool check = infoservice.IsConnectedToVault();

        if (login == true)
        {
            Console.WriteLine("Succesfully logged in!");
        }
        if (login == false)
        {
            Console.WriteLine("Login failed!");
        }

        Console.WriteLine(infoservice.IsConnectedToVault());  // returns fallse..

        Uri siteUri = new Uri("http://ironman/CadacWebservice/InfoService.asmx");

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(siteUri);
        request.CookieContainer = new CookieContainer();

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        foreach (Cookie cook in response.Cookies)
        {
            Console.WriteLine("Cookie:");
            Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
            Console.WriteLine("Domain: {0}", cook.Domain);
            Console.WriteLine("Path: {0}", cook.Path);
            Console.WriteLine("Port: {0}", cook.Port);
            Console.WriteLine("Secure: {0}", cook.Secure);

            Console.WriteLine("When issued: {0}", cook.TimeStamp);
            Console.WriteLine("Expires: {0} (expired? {1})",
                cook.Expires, cook.Expired);
            Console.WriteLine("Don't save: {0}", cook.Discard);
            Console.WriteLine("Comment: {0}", cook.Comment);
            Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
            Console.WriteLine("Version: RFC {0}", cook.Version == 1 ? "2109" : "2965");

            Console.WriteLine("String: {0}", cook.ToString());
            Console.ReadLine();
        }

私はいくつかのperlコードを手に入れることができましたが、それが機能することはわかっています:しかし今はc#でそれが必要です。

ログイン:

$soap = SOAP::Lite->new( proxy => 'http://localhost/Webservice/InfoService.asmx');

$soap->on_action( sub {sprintf '%s%s', @_} );

$soap->default_ns('http://x/webservices/');

$soap->uri('http://x.com/webservices/');

$soap->proxy('http://localhost/Webservice/InfoService.asmx', keep_alive => 1, cookie_jar => 
HTTP::Cookies->new(ignore_discard => 1));

$soap->encodingStyle("");

Webサービスにログインします

my $som = $soap->call('LoginToVault',

                SOAP::Data->name('server')->value('server')->type(''),

                SOAP::Data->name('vault')->value('vault')->type(''),

                SOAP::Data->name('user')->value('user')->type(''),

                SOAP::Data->name('password')->value('pass')->type('')
);

my $result = $som->result, "\n";
4

1 に答える 1

1

私はあなたのコードを調べました、私はそうは思わないので、あなたのコードに間違いはありません。ここに1つの質問があります1)そのWebサービスはあなたによって開発されましたか?いいえの場合は、SoupUIを使用してこのWebサービスをテストしてください。はいの場合は、IsConnectedToVaultメソッドから返される値を確認してください。

于 2012-11-03T15:56:48.710 に答える