2

WCF RESTfulサービスに飛び込んで、次のエラーに遭遇しました。

>'/'アプリケーションのサーバーエラー。

 IIS specified authentication schemes 'None', but the binding only supports
 specification of exactly one authentication scheme. Valid authentication
schemes are Digest, Negotiate, NTLM, Basic, or Anonymous.
Change the IIS settings so that only a single authentication scheme is used. 

シナリオは次のとおりです。

ルーティングを使用し.svcてURLからを削除するWCFサービスを開発しています。だから私はに行くことができますhttp://mySite/MyService。匿名認証を有効にすると、これは完全に機能します。

これを実現するために、「svcファイルと構成のないRESTfulWCFサービス」に関するSteveMichelottiのチュートリアルに従いました。

コードは次のように分類されます。

私の実際のサービスクラスは次のとおりです。

Imports System.ServiceModel
Imports System.ServiceModel.Web
Imports System.ServiceModel.Activation

 Namespace Service

<ServiceContract()> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class Product

    <OperationContract()> _
    <WebInvoke(Method:="GET")> _
    Public Function GetProducts() As String
        Return "Listing ALL Products"
    End Function

End Class

名前空間の終了

ルーティングは、「Global.asax」ファイルで次のように有効になっています。

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RouteTable.Routes.Add(New ServiceRoute("Product", New WebServiceHostFactory(), GetType(Service.Product)))
End Sub

私の「web.config」は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="OLAPIBasicAuthModule" type="Service.ServiceValidator" />
    </modules>
    <security>
        <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
        </authentication>
    </security>
</system.webServer>

<system.web>
    <httpRuntime requestValidationMode="2.0" />
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
        <assemblies>
            <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
            <add assembly="System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
            <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        </assemblies>
    </compilation>
</system.web>

<system.serviceModel>        
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>      

ここで、基本認証を処理するために、「。NETを使用したモジュールの開発」に関するMikeVolodarskyのチュートリアルに従いました。

これは基本的に、リクエストを検証するクラスを提供します。

デバッガーを実行すると、ブラウザーがユーザー名/パスワードを要求します。それらを入力すると、カスタムバリデーターを介して検証され、trueが返されますが、サービス呼び出しは失敗し、この質問の上部にエラーが表示されます。

私が言ったように、匿名認証を有効にすると、すべてが機能します。訪問できhttp://mySite/Product/GetProducts​​、テスト文字列が返されます。

基本認証を有効にするために、さまざまなサービス/バインディング/動作などを設定するweb.configで多数のエントリを試しましたが、通常は上記のエラーが発生します。

テクノロジーをミックスしているからだと感じています。IEは、エンドポイントなどを使用するのではなく、ルーティングを使用してサービスを呼び出します。

とはいえ、現時点では、WCFサービスについての私の理解はかなり限られています。

最終的には、ルーティングを使用して(URLの.svcを無効にするために)基本認証を有効にする必要がありますが、ユーザー名/パスワードはSQLであり、サーバー/ IIS自体では役に立たないため、独自のカスタムバリデーターが必要です。

何か案は?

ああ...私も私の設定でこれを試しました。:

<bindings>
        <basicHttpBinding>
            <binding name="httpBinding">
                <security mode="Transport">
                    <transport clientCredentialType="Basic" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>

それでも同じエラーが発生しました

4

0 に答える 0