0

.NET 4.0 Web アプリケーション プロジェクト内に WCF エンド ポイントがあります。VS2010 WCF テスト クライアントを使用すると、サービスに正しく接続できます。ただし、サービスを使用すると、一般的なエラー メッセージが表示されます。

コンテンツ タイプ text/html。応答メッセージの charset=UTF-8 がバインディングのコンテンツ タイプ (text/xml; charset=utf-8) と一致しません。カスタム エンコーダーを使用する場合は、IsContentTypeSupported メソッドが適切に実装されていることを確認してください。応答の最初の 1024 バイトは次のとおりです。

IIS Express でリクエストを確認したところ、次の結果が得られました。

リクエスト開始: POST http://machinename:port/Services/Services.svc

リクエスト開始: GET http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1

リクエスト開始: GET http://machinename:port/(X(1)A(LKwosYYszAEkAAAAMDE2YzlmNWItNTZIOS00ZDY1LTgzOTAtNDIxNDgyOWZIYWViJ86TX46muUQoL_psmkZK2rgWbO41))/Services/Services.svc?AspxAutoDectectCookieSupport=1

要求が終了しました: HTTP ステータス 302.0 の「http://machinename:port/Services/Services.svc」

要求が終了しました: "http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1" HTTP ステータス 302.0

要求が終了しました: "http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1" HTTP ステータス 200.0

そのため、サービスに POST した後、サービスの標準 Web ページにリダイレクトされているようです。しかし、私が削除すると:

<authentication mode="Forms">
<forms cookieless="AutoDetect" loginUrl="~/Security/LoginClient.aspx" name="FORMAUTH" />

web.configから動作します。何が起こっているのですか?サービスが存在するフォルダーを認証から削除しようとしましたが (http://stackoverflow.com/questions/5593720/authentication-mode-forms-causing-errors-in-wcf-end-point)、問題はまだ残っています。

これは Visual Studio Development Server (Cassini) を使用して IIS Express 7.5 で実行すると機能しますが、認証の有無にかかわらず同じエラーが発生します。

4

2 に答える 2

2

web.config で、Web サービスに匿名で接続するための承認を提供する必要があります。

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

MyWebServicesこれは、すべてのサービスを、アプリケーションのルートに関連するという名前のフォルダーに保持していることを前提としています。許可する*必要があります。そうしないと、アクセスのためにログインが強制されます。

于 2011-06-06T12:56:40.200 に答える
0

サービス アドレスで localhost の代わりにマシン名を使用するとすぐに、同じ問題が発生します。「baseAddressPrefixFilters」を使用しようとしましたが、成功しませんでした。

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://XLSiteSampleD.aginsurance.intranet/PIXLSiteSample" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

そのオプションは、サービスの関連属性を使用してweb.configでaspNetCompatibilityを有効にすることである可能性があると思いました:[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]しかし、トリックでもありません:(

ドメインや baseAddressPrefixFilters なしでhttp://localhost/VirtualSite/MyService.svcのようなアドレスでのみ機能します。

V.

于 2011-06-06T12:53:56.970 に答える