2009-05-14 26 views
7

私は、クライアントとサーバー間の通信にWCFを利用する単純なアプリケーションを作成しました。私はローカルで実行するとそれが正常に動作し、私は2つの異なるボックス上のサーバとクライアントを実行すると、しかし私は、次の例外を取得:WCFアプリケーションの資格情報を設定していますか?

Unexpected error occured, while getting the group names from the VDN server 
System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials. 
System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials. 
System.ComponentModel.Win32Exception: The logon attempt failed 

受け入れされていない資格情報は何ですか?どうすれば設定できますか?

認証を要求しないようにサーバーを構成する方法はありますか?アプリケーションはセキュリティ上の単純な監視アプリケーションではありません。非常に特定されていない約

申し訳ありません: アプリパイププロキシを使用して手が符号化されるWCFコードとして何WCF設定ファイルは存在しません。

私のWCFのコードは、このチュートリアルのコードに基づいています。 http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

私は私がすべてのコードを書き終えたと思います後までの設定からWCFクラスを生成するために標準procticeたkonwませんでした。今私はチュートリアル/ヘルプのドックを見るたびに生成されたコードを使用し、すべての設定を変更する必要があります。

私はwcfコンポーネントを1つのthtで生成されたコードを置き換えるためにバンド幅を持っていませんが(wcfを使用する次回はコード生成を使用します)

+0

もっと具体的にする必要があると思います。使用しているバインディングは何ですか? –

答えて

5

このようなメソッドを作成します...

void SetImpersonation(ref IServiceClient proxy) 
{ 
    proxy.ClientCredentials.Windows.ClientCredential.Domain = "MYDOMAIN"; 
    proxy.ClientCredentials.Windows.ClientCredential.UserName = "A_USER"; 
    proxy.ClientCredentials.Windows.ClientCredential.Password = "P4SSW0RD"; 
} 

と、作成したときにそれを呼び出します新しいクライアントクラス。

IServiceClient proxy = new IServiceClient(); 
SetImpersonation(ref proxy); 

Obvouslyが、これは特定のユーザであるとの情報を設定し、あなたのコードを逆コンパイルされた場合にセキュリティの意味を持っていますが、それはあなたがしている場合

+0

これらの値をapp.configに移行できます。私はちょうどwcfコードの設定ファイルを持っていません。 ありがとうございます。 –

+0

私のクライアントを使用するたびにこれを設定しないでください。私のソリューションのすべてのクライアントに対してこれを設定する方法はありますか? – SomeRandomName

11

ここでは、wcfのセキュリティ/認証を無効にするための検索で見つけた解決策があります。 MSDNから

WSHttpBinding b = new WSHttpBinding(); 

b.Security.Mode = SecurityMode.None; 

や設定に次の行を追加します。

<wsHttpBinding> 

    <binding name="myBinding"> 

     <security mode="None" /> 

    </binding> 

</wsHttpBinding> 
+0

元の例外はWindows認証を使用するバインディング構成に起因する可能性があるため、このソリューションを使用するには慎重に移動する必要があります。その場合、セキュリティを盲目的に取り除くことは悪い考えです。 Windows認証を使用している場合は、一番下の自分の答えを確認してください。 – atconway

+0

うまく動作しました。ありがとう:) –

1

あなたの(設定ファイルレスシナリオ)で動作するはずさ次のセキュリティとWCFバインディング構成を使用して:

<transport clientCredentialType="Windows" /> 

あなたが明示的に以下のようなコードで作成されたWCFインスタンス上のWindows資格情報を設定する必要があります

'Create an instance of the WCF service  
Dim MyService As New MyWCFServiceClient 

'Build credentials object for which this WCF call will be made 
MyService.ClientCredentials.Windows.ClientCredential = New System.Net.NetworkCredential("UserName", "Password", "DomainName") 

'Call a method on the service 
MyService.MyMethod1() 
関連する問題