2

C# クライアントから C# ベースのサービスを利用しようとしています。

サービス メソッドの呼び出しで中断し、前のプロパティusernamepasswordプロパティにカーソルを合わせて、それらが設定されていることを確認し、メソッドをステップ オーバーすると、正常に動作します。サービス メソッド呼び出しで中断し、すぐにユーザー名とパスワードを確認せずにメソッド呼び出しをステップ オーバーすると、object reference not set to an instance of an object.

ユーザー名とパスワードはapp.configファイルから取得されており、構成値は変更されていません。

これはおそらく同期処理の問題であり、ユーザー名とパスワードが時間内に設定されていませんか? 電話を挿入しようとしましたsleep(5000)が、役に立ちません。サービスリファレンスを何度も更新しました。

MyService.ServiceClient sc = new MyService.ServiceClient();

sc.ClientCredentials.UserName.UserName ="pinkpanther"; // comes from app.config file
sc.ClientCredentials.UserName.Password = "clouseau"; // comes from app.config file

//open service client/proxy
sc.Open();

Dictionary<int, string> result = new Dictionary<int, string>();

// Sleep(5000); this doesn't seem to help

result = sc.FindVillain("Paris", "Train", "Car3", 4);

success = result.ContainsValue("The villain has been detained.");

sc.Close();
4

1 に答える 1

0

指定はしませんが、WCF Webサービスを想定すると、wsメソッドを最初に呼び出すまで、プロキシ接続は実際には試行されないことに注意してください。そのかなり奇妙な動作ですが、私の経験から、.Open()を呼び出したときにクライアント接続が実際に確立されていません。コードでは、接続は.FindVillain()呼び出しで試行されます。.FindVillain()にステップインして、実際にnullであるものを確認する(またはスタックトレースを使用する)必要があります。また、別のwsメソッド(使用可能な場合)を呼び出して、最初の呼び出しで、または具体的には.FindVillain()でnull例外がスローされるかどうかを確認することもできます。

幸運を

于 2012-11-05T18:22:45.993 に答える