WCFのカスタムユーザー名認証に大きな問題があります。私は、CustomUserValidatorを介してユーザーの検証が必要な単純なWCFサービスを作成しました。私はログインするとコンソールアプリケーションから、次のように:WCF認証の問題
using (var svc = new ServiceReference2.DBServiceClient())
{
Console.WriteLine("Username: ");
string user = Console.ReadLine();
Console.WriteLine("Pass: ");
string pass = Console.ReadLine();
svc.ClientCredentials.UserName.UserName=user;
svc.ClientCredentials.UserName.Password=pass;
Console.WriteLine(svc.GetAllDepartmentList().First().DepartmentID);
Console.Read();
}
すべてが細かいですが、私はessentialy私がエラーを持って同じことを行う私のGUIクライアントを使用したい場合: 外例外:
をSecure channel cannot be opened because security negotiation with the remote endpoint has failed. This may be due to absent or incorrectly specified EndpointIdentity in the EndpointAddress used to create the channel. Please verify the EndpointIdentity specified or implied by the EndpointAddress correctly identifies the remote endpoint.
内部例外:
The request for security token has invalid or malformed elements.
それらの両方のためのapp.configエントリは同じです:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IDBService"
closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00" enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows"
proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName"
negotiateServiceCredential="true" algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="WSHttpBinding_IDBService"
address="http://localhost:8732/Design_Time_Addresses/DBService/Service1/"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IDBService"
contract="ServiceReference2.IDBService" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
ありがとうございました!
編集:私は例外をキャッチしている投稿GUIコード:
using (var svc = new DBServiceHost.DBServiceClient())
{
svc.ClientCredentials.UserName.UserName = view.userName;
svc.ClientCredentials.UserName.Password = view.userPass;
int asd = svc.GetCompanies().First().CompanyID;
}
このassigment intには、ちょうどこの場所でこの例外を取得することです。
GUIのコードをポストすることができますか?そこに微妙な違いがありますか? – Jacob
コンソールアプリケーションではServiceReference2.DBServiceClientクライアントを作成していますが、UIアプリケーションではDBServiceHost.DBServiceClientを作成しています。あなたの設定はこれらの名前の変更を反映していますか? –
はい、DBServiceHostは同じサービスへの参照です。ちょうどUIアプリケーションで、名前を付けてコンソールアプリケーションを標準名ですばやく実行しました – Pax0r