私が開発したasmx Webサービスの認証エラーが発生しました。 Webサービス自体はユーザー資格情報を必要としませんが、匿名アクセスを許可するように設定しようとしましたが、Webサービスがそれを実施するように設定されているようです。匿名アクセスを許可するASMX Webサービス
私は対応するWebサイトを設定しましたIISで匿名アクセスを可能にする:呼び出そうとすると
<configuration>
...
<system.web>
...
<authorization>
<allow users="*"/>
</authorization>
...
</system.web>
...
</configuration>
:
さらに私は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>
いくつかのこと...クライアント側のサービス構成に関するテストクライアントからweb.configセクションを投稿できますか?また、サービス側でメソッドを静的にしようとしましたか?私はいくつかの他のコンテキスト(通常のaspxページなど)で知っている、WebMethodsは静的である必要がありますが、私はasmxのために覚えていません。 – Andrew
@Andrew:あなたのコメントをありがとう。私は私の質問にいくつかの詳細を追加しました。私はまた、Webブラウザ経由でアクセスしようとしていたので、app.configがあまり関係ないかもしれません。私はまだ参照のためにそれを追加しました。あなたは決して知りません... – chiccodoro
匿名アクセスのために使用しているユーザーはあなたのフォルダに対する読み取り権を持っていますか? –