18

あいさつ、次のようにファクトリのクレデンシャルを設定しようとすると、どのような問題が発生しますか。

ChannelFactory<IWCFSeekService> factory = Factory;
if (factory != null)
{
    factory.Credentials.UserName.UserName = CServiceCredentials.Instance.Username;
    _Channel = factory.CreateChannel();
}

オブジェクトが読み取り専用であるという例外が発生します。ユーザー名を設定したいときに発生します。

4

3 に答える 3

25

はい、MSDNのドキュメントは非常に明確です。

C#
public ClientCredentials Credentials { get; }

プロパティにはアクセサーのみがあり、getアクセサーは設定されていません->読み取り専用です。

また、MSDNドキュメントで:

解説
ClientCredentialsオブジェクトは、エンドポイント動作のタイプとして保存され、Behaviorsプロパティを介してアクセスできます。

OnOpenedメソッドは、ファクトリのClientCredentialsオブジェクトの読み取り専用コピーを初期化します。

それで、あなたはここで何をしているのですか?

更新:クライアントプロキシがチャネルファクトリで使用することになっているユーザー資格情報を設定することはできません。とにかくそれを行う方法については、この優れたブログ投稿を参照してください-少し回り道をします:

  • まず、デフォルトのエンドポイント動作をファクトリから削除します
  • 次に、独自の資格情報をインスタンス化します
  • 第三に、これらの新しいクレデンシャルをファクトリでの新しいエンドポイントの動作として設定します

    // step one - find and remove default endpoint behavior 
    var defaultCredentials = factory.Endpoint.Behaviors.Find<ClientCredentials>();
    factory.Endpoint.Behaviors.Remove(defaultCredentials); 
    
    // step two - instantiate your credentials
    ClientCredentials loginCredentials = new ClientCredentials();
    loginCredentials.UserName.UserName = CServiceCredentials.Instance.Username;
    loginCredentials.UserName.Password = “Password123″;
    
    // step three - set that as new endpoint behavior on factory
    factory.Endpoint.Behaviors.Add(loginCredentials); //add required ones
    

少し奇妙で複雑に見えますが、これを達成する唯一の方法のようです!

于 2010-03-07T20:55:10.083 に答える
21

この答えを完成させるために、で説明されているように、それがすべての人のために働いた実際の方法

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4668e261-0fd0-4ca5-91d2-497aa479f2a9/

削除する必要はありませんが、見つかった資格情報を上書きします。

var credentialBehaviour = factory.Endpoint.Behaviors.Find < ClientCredentials > ();
credentialBehaviour.UserName.UserName = "test";
credentialBehaviour.UserName.Password = "test";

これで私の問題は解決しました。

于 2011-12-28T19:49:50.747 に答える
-1

これは、サービス参照が->サービス参照の追加->詳細設定->Web参照の追加->Url / wsdl(ローカルディスクファイル)を介して追加された場合には発生しません。

生成されるreference.csファイルは異なり、クレデンシャルを設定できます。エラーは、最初の画面自体から参照を追加した可能性があるためです(サービス参照の追加)

于 2018-04-04T14:58:53.803 に答える