2011-01-24 23 views
6

私が開発したasmx Webサービスの認証エラーが発生しました。 Webサービス自体はユーザー資格情報を必要としませんが、匿名アクセスを許可するように設定しようとしましたが、Webサービスがそれを実施するように設定されているようです。匿名アクセスを許可するASMX Webサービス

私は対応するWebサイトを設定しましたIISで匿名アクセスを可能にする:呼び出そうとすると

<configuration> 
    ... 
    <system.web> 
     ... 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     ... 
    </system.web> 
    ... 
</configuration> 

Screenshot of IIS setting

さらに私はweb.configに次の行が含まれていますテストクライアントからのWebサービスは、私は、このエラーメッセージが表示されます:

HTTPリクエストは クライアント認証方式 「匿名」と不正です。サーバーから受信した認証ヘッダー は「NTLM」でした。

Webサービスを呼び出すコード行は次のようになります。

string message = new ServiceReference1.Service1SoapClient().HelloWorld(); 

とWebサービスのコード:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 
} 

いくつかの重要なポイント:

  • NTLMを使用してクライアントを認証しようとすると、正常に動作します。
  • クライアントを認証しないように設定しようとすると、上記のメッセージで失敗します。
  • Webブラウザを使用してWebサービスにアクセスしようとすると、予想されるWebサービスのドキュメントページではなく、FORBIDDENエラーメッセージが表示されます。
  • Visual Studio内でWebサービスを実行し、そのサービス(localhost ...)にアクセスするようにクライアントを設定すると、正常に動作します。
  • さらに多くの詳細については以下を

を参照してください。私も試したし、Webサービスを指すロケーションタグ内の認証タグを入れて:

<location path="Service1.asmx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

これはどのようにクライアントです設定(app.config)は次のようになります(上記のように、Webブラウザを使用してサービスにアクセスすることもできないので、クライアントの設定を考慮する必要はありません)。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://name.of.the.server.example.org/Service1.asmx" 
       binding="basicHttpBinding" bindingConfiguration="Service1Soap" 
       contract="ServiceReference1.Service1Soap" name="Service1Soap" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

いずれかのアイデアはありますか?


更新:

C:\WINNT\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles\web.config 

それはカスタムWebアプリケーションへの関連性を持っていますし、そうならば、私自身のweb.configファイルの設定が上書きされることはありません。私は、次のファイルを見つけましたそのファイルの設定?そのファイルの

内容:

<configuration> 
    <system.web> 
     <membership> 
      <providers> 
       <add name="WebAdminMembershipProvider" type="System.Web.Administration.WebAdminMembershipProvider" /> 
      </providers> 
     </membership> 
     <httpModules> 
      <add name="WebAdminModule" type="System.Web.Administration.WebAdminModule"/> 
     </httpModules> 
     <authentication mode="Windows"/> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
     <identity impersonate="true"/> 
     <trust level="Full"/> 
     <pages validateRequest="true"/> 
     <globalization uiCulture="auto:en-US" /> 
    </system.web> 
</configuration> 

が別のファイルであるけれども:

C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\web.config 

は、私はむしろ、この1つは、システム全体のweb.configファイルだと思います。実際でこのファイルには、すべてのユーザーにアクセスすることができます:

<system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
+0

いくつかのこと...クライアント側のサービス構成に関するテストクライアントからweb.configセクションを投稿できますか?また、サービス側でメソッドを静的にしようとしましたか?私はいくつかの他のコンテキスト(通常のaspxページなど)で知っている、WebMethodsは静的である必要がありますが、私はasmxのために覚えていません。 – Andrew

+0

@Andrew:あなたのコメントをありがとう。私は私の質問にいくつかの詳細を追加しました。私はまた、Webブラウザ経由でアクセスしようとしていたので、app.configがあまり関係ないかもしれません。私はまだ参照のためにそれを追加しました。あなたは決して知りません... – chiccodoro

+0

匿名アクセスのために使用しているユーザーはあなたのフォルダに対する読み取り権を持っていますか? –

答えて

0

匿名アクセスに使用するように設定されたインターネットゲストアカウントに問題があるようです。そのアカウントを別のアカウントに設定すると、正常に動作します。

0

はい、サーバーは、サイトへの匿名アクセスを許可するように設定する必要があります。
<allow users="*" />は、(.net部分から)行う必要があります。

+0

これで、匿名アクセスを試して設定しました(上記の更新を参照)。それでも動作しません。 – chiccodoro

+0

こんにちは、私の(更新された)質問をもう一度見てもらえますか?私は本当に失われたと感じています... – chiccodoro

0

から.Net。あなたが既に行ったように、すべてのユーザーを許可する必要があります。また、匿名アクセスを許可するようにIISを構成する必要があります。他のページでどのように認証しますか?

+0

私は匿名アクセスを試みました(上記の更新を参照)。それでも動作しません。 – chiccodoro

+0

こんにちはSmelch、私の(更新された)質問をもう一度読んだら、もうアイデアはありますか? – chiccodoro

1

あなたのアプリに構成設定を提供している上位レベルのweb.configおよび/またはmachine.configを確認しましたか?

+0

私は何か興味深いものを見つけましたが、どのように関連性があるのか​​分かりません。更新された質問をご覧ください。 – chiccodoro

6

*は、認証されたユーザーを意味し、代わりに?を使用する必要があります。

は、ウェブサイト全体の認証を無効にしてみてください:test.txtというファイルを作成し、Webブラウザからアクセスしてみてください。

<system.web> 
    <authentication mode="None" /> 
    <authorization> 
    <allow users="?" /> 
    </authorization> 
</system.web> 

は、このチェックを行います。あなたは 'アクセス拒否'エラーを取得しますか?

次に、存在しないaspxページを開くようにしてください。 blah.aspx。アクセス拒否ではなく404エラーが発生するはずです。

+0

残念ながら、これは何も変わりませんでした。しかし、匿名アクセス用に設定されたアカウントの問題であることがわかりました。 – chiccodoro

+0

または、権限設定を上書きするサービスを含むフォルダにweb.configを貼り付けます – CRice

関連する問題