ASP.NET アプリケーションを実行しており、それに WCF Rest サービスを追加しました。ローカルおよびテスト環境にデプロイされた場合、これは正常に機能します。問題は、HTTPS のみである本番環境にデプロイするときです。
私はほとんどの回答をオンラインで検索して読み、非常に多くのことを試しました。すべて運が悪い。
これが私たちの簡単なコードです
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ReportingService
{
public ReportingService()
{
Thread.CurrentPrincipal = HttpContext.Current.User;
}
[OperationContract]
[WebGet(UriTemplate = "get/{id}", ResponseFormat = WebMessageFormat.Json)]
[PrincipalPermission(SecurityAction.Demand)]
public List<RawReportTable> GetReport(string id)
{
...
}
}
Global.asax.cs には
RouteTable.Routes.Add(new ServiceRoute("api/reporting", new WebServiceHostFactory(), typeof(ReportingService)));
web.config では、system.serviceModel に対して次のように定義されています。
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="api" helpEnabled="true" automaticFormatSelectionEnabled="true" maxBufferSize="500000" maxReceivedMessageSize="500000">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="Transport" />
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
<behaviors>
<endpointBehaviors>
<behavior name="api">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceCredentials>
<serviceCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" findValue="d5 85 5b 37 89 47 6f 89 71 5b b7 5d 87 6f 2e e5 24 aa 57 b6" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ReportingService">
<endpoint address="api/reporting" behaviorConfiguration="api" binding="webHttpBinding" bindingConfiguration="webBinding" contract="WayfinderFM.Service.api.ReportingService" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
このセットアップでは、次のエラーが発生します。 リクエスト エラー: サーバーでリクエストの処理中にエラーが発生しました。詳細については、サーバー ログを参照してください。
ルーティングに登録されているため、構成にサービス/エンドポイントのものはもう必要ないと思いました (そしていくつかの例が示しています)。
その部分を削除しても、同じエラーが発生します。私は多くの異なる構成を試しましたが、すべてうまくいきませんでした。
奇妙なことは、 /api/reporting/help が実際に表示されることです。どのサービスも利用できません。
誰でも何か考えがありますか?私はそれが私が見逃した単純なものであることを願っています。
皆さんありがとう
編集
[PrincipalPermission(SecurityAction.Demand)] に関係していると思います。これを使用して、ユーザーが認証され、トークンにアクセスできることを確認します。WCF サービスが SSL に移行されると、PrincipalPermission.Demand() が失敗することがわかりましたが、残念ながらそれに対する回答はありません。