2009-06-10 20 views
0

ビルトインのWCFサービスホストを使用している小さなWCF Webサービスと、Visual Studio 2008の組み込み開発Webサーバーをホストしています。IISでホストされているWCFサービスを、Windows認証と匿名の両方で構成できますか?

Iこれらのホスティング環境私は、サービスメソッドを呼び出すためにWCFテストクライアントに頼っていました。

は今、私はテストの私の次の段階の問題に実行しています:

私はそれが私のWinXPのdevのマシン上のIIS 5.1でホストされていると私は多分問題は、私はもう、WCFテストクライアントを使用し続けることができないと思い持っています。 「匿名アクセス」オン(有効)

WCFテストクライアントUI

はWebMethodのとINVOKEボタンを暴露、適切に来ている:

ケース1:ここでは何が起こっているかです。 ただし、[呼び出し]をクリックすると、Windows認証が必要なバックエンドデータストア(サードパーティ製製品)に接続できません。私はproduct.DLLから戻って来るエラーを投稿することができますが、私はそれが関連しているとは思わない。

ケース2: "匿名アクセス" は未チェックされている(DISABLED)

WCFテストクライアントUIでも正しく初期化に失敗しました。私の研究は、MEX(WS-メタデータエクスチェンジ)には「匿名アクセス」が必要であり、(明らかに)WCFテストクライアントにはMEXが必要であることがわかります。ここで返されるエラーの重要な抜粋です:

Error: Cannot obtain Metadata from http://localhost/wcfiishost 
The remote server returned an error: (401) Unauthorized.HTTP GET Error 
URI: http://localhost/wcfiishost  
There was an error downloading 'http://localhost/wcfiishost'.  
The request failed with the error message: 
Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service 

ザ・バインディングオプションの説明がたくさん、メッセージセキュリティ、などと私は正直理解していないものです。

(a)Windows認証を使用するようにWCF Webサービスを設定しなければならないことがわかっているため、私はWCFテストクライアントを使用するためにWCFテストクライアントを使用することはできません。 IISのサービス。それが効果的にそれが私にとって有用であることを実証しました。 WCFTestClientはAnonymousなしでは動作しないため、Webクライアントを書く時間を取らなければなりません。

(または)

(b)はそれとホスティングサービスは、(私は特別な設定技術は、このためのものであるのか分からない)propertly構成されている場合、WCFテストクライアントを使用することが可能です。

どちらが正しいですか? WCFTestClientを使用して停止する時間、またはそれを両方の方法で使用する方法はありますか?あなたの助言のために事前に感謝します。

EDIT:6月11日私は他の誰かがこの質問に私を助ける助けるために提供することができない何かが09

ありますか?

+0

PS:あなたはあなたのサービスのために使用されているバインディング?おそらく "basicHttpBinding"で試してみてください(まだ使っていないのであれば)? –

答えて

0

この質問のタイトル/件名を設定してここで終わりに達したとき、私は同じ問題をタイトルに重点を置いてMSDNフォーラムで開きました(質問の内容は本質的に同じです)。

実際の問題は、匿名認証が設定されていないIISでWCFTestClientを使用する方法でした(私のサービスでは統合Windows認証が必要なため)。

メキシコは明らかに匿名を必要とし、デフォルトではWCFTestClientはMexを必要とするようです。鍵はweb.configファイルを慎重に整理することに慎重に対応しているようです。

<?xml version="1.0"?> 
<configuration> 

  <endpoint address="" 
         binding="wsHttpBinding" 
         bindingConfiguration="wsBindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService"> 

           <identity> 
            <dns value="localhost" /> 
           </identity> 
      </endpoint> 

      <endpoint address="basic" 
         binding="basicHttpBinding" 
         bindingConfiguration="bindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService" /> 
     </service> 
    </services> 

    <bindings> 
     <basicHttpBinding> 
      <binding name="bindingConfig"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 

     <wsHttpBinding> 
      <binding name="wsBindingConfig"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 

とにかく、私はそれが(the MSDN link is hereの下に、このweb.configファイルで作業しました10

0

私はちょうど同じ設定をしようとしました - しかし、私の場合はすべてがうまくいくようです。

  • ASP。NETのウェブサイト
  • WCFサービス、有効になっており、Windows認証=匿名ですべての
  • IISアプリケーションで特別な設定なしにbasicHttpBindingを使用して=有効(両方ともオン)

私は簡単で、それに接続することができますWcfTestClientを実行してメタデータを取得しても問題はありません。

Windowsはユーザー認証済みとして私のサービス機能の中に、私は現在のユーザが既知のユーザであるかどうかを確認し、それが正しく識別されています。私は本当に知らない

ServiceSecurityContext ssc = ServiceSecurityContext.Current; 

    if (ssc.IsAnonymous) 
    { 
     return "anonymous user"; 
    } 
    else 
    { 
     if(ssc.WindowsIdentity != null) 
     { 
      return ssc.WindowsIdentity.Name; 
     } 

     if (ssc.PrimaryIdentity != null) 
     { 
      return ssc.PrimaryIdentity.Name; 
     } 
    } 

    return "(no known user)"; 

を、より多くのものを(私はVistaでIIS7を使っています)をチェックします。あなたのサービスコードでユーザーを確認するためにこのコードを含めることができますか?ちょうど見る....

マーク

0

マーク、あなたの設定はジョンズにも近くない。

ジョンは、メッセージモード転送にWindows資格情報を使用するWSHttpBindingを使用します。 BasicHttpBindingでWindows認証が使用されていません。さらに、JohnはAnonymousAuthenticationを無効にしました。そのため、メタデータエクスチェンジ(mex)が失敗しています。

私たちが電話しようとすると、エラー401(Unauthorized)が発生するため、サービス側の機能の内側にもコールは届きません。

ちょうどジョンを知っている、私は同じ問題があり、何とかエンドポイントごとに別々のバインディングを設定しようとしています。うまくいけばうまくいきます。

+0

私たちはすでにmexのために別のバインディングを使用していますので、そのアイデアは気にしないでください。私は現在も迷っています。 –

関連する問題