1

IIS でホストされている WCF サービスがあります。ビジネス上の理由から、このインスタンスのパブリック URL を投稿することはできませんが、私の言いたいことはわかると思います。

問題は、エンドポイントに到達するために、パス セグメントの一部としてを含めているように見えることですService.svc。つまり、次のような URL を使用する必要があります。

http://<domain>/<app-name>/Service.svc/<relative-path>

どうすればこれを回避できますか? つまり、次の方法で簡単にサービスにアクセスしたいと思います。

http://<domain>/<app-name>/<relative-path>

開発中にサービスをセルフホスティングしていたとき、これを完全に行うことができました。


最後に、これはそれほど超越的ではありませんが、http://<domain>/<AppName>/Service.svcURL を参照すると、標準のサービス情報ページが表示されます。

これにアクセスできないようにする方法はありますか?

ここに画像の説明を入力

4

4 に答える 4

5

最初の部分: URL の「service.svc」部分を持たないようにするには、ASP.NET ルーティング機能とServiceRouteクラスを使用できます。ルートのプレフィックスは空の文字列になります。http://blogs.msdn.com/b/endpoint/archive/2010/01/25/using-routes-to-compose-wcf-webhttp-services.aspxの投稿は、これを行う方法を示しています。

2 番目の部分: 「ヘルプ」ページが表示されないようにするには、構成 (またはカスタム サービス ホスト ファクトリを使用するコード) を介して無効にできます。構成を介してそれを行う方法は次のとおりです。

<serviceBehaviors>
    <behavior>
        <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"/>
    </behavior>
</serviceBehaviors>

この動作には「name」属性がありません。つまり、サービスのデフォルトの動作として使用されます。

于 2012-07-11T20:32:15.053 に答える
3

私のような .net 初心者のための段階的な手順:

  1. Web.configファイルを開き、が true に設定されていることを確認しますaspNetCompatibilityEnabled

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    
  2. プロジェクトを右クリックし、[追加] -> [新しい項目] をクリックします。「グローバル アプリケーション クラス」を見つけます。これにより、Global.asax ファイルが自動生成されます。

  3. Global.asax ファイルを開き、Application_Startメソッドが次のようになっていることを確認します。

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("", new ServiceHostFactory(), typeof(MyServiceImplementation)));
    }
    

MyServiceImplementation( Service1.svc内のクラスが呼び出されるものに変更してください)

  1. 次の参照を追加したことを確認します。

    using System.ServiceModel.Activation;
    using System.Web.Routing;
    

これらが見つからず、.net 4.5 より前のものを使用している場合は、クライアント インストールではなくフル インストールを使用していることを確認してください。また、これらのパッケージ参照を追加したことを確認してください (プロジェクトを右クリックし、[追加] -> [参照] をクリックし、パッケージ名を見つけて、チェックされていることを確認します)。

  1. IIS を再起動します。Service1.svc (またはあなたの名前が何であれ) ファイルは非表示になっているはずです。
于 2015-01-08T21:56:46.770 に答える
1

サービスメタデータを公開しないことでこれに到達できます-エンドポイントにコメントするだけです

 <endpoint address="mex" binding="mexHttpBinding" name="IMetadataExchange_mexHttpBinding" contract="IMetadataExchange" />

URLによると-@Edmund Yに同意します-彼は便利なリンクを提供しました

于 2012-07-11T20:19:10.607 に答える
0

@carlosfigueiraのアドバイスを実装するために私がしたことが最もクリーンなことだったかどうか知りたいだけです:

最終的に Global.asax ファイルを使用し、ハンドラServiceRouteに空のroutePrefixを追加しました。@Edmund Y: ServiceRoute + WebServiceHostFactory kills WSDL generation? がApplication_Start共有する記事で読んでいたように、なぜWebServiceHostFactoryvsを使用しているのかよくわかりません。?wsdl を使用して拡張機能のない WCF サービスを作成する方法ServiceHostFactory

いずれにせよ、私は必要なことを解決できたと思います。あなたの助けに感謝します.

于 2012-07-11T23:35:38.703 に答える