1

私はこのWCFサービス契約を持っています:

[ServiceContract]
public interface IPolicyRetriever
{
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    Stream GetSilverlightPolicy();
}

このWeb.configセクションで:

  <service behaviorConfiguration="policyRetrieverServiceBehavior" 
      name="WebService.PolicyRetriever">
    <endpoint address="" binding="webHttpBinding"
        behaviorConfiguration="policyRetrieverEndpointBehavior"
        contract="WebService.IPolicyRetriever" />
  </service>

サーバーは で実行されてlocalhostおり、Visual Studio の Web ホスティングを使用してポートで実行されて8080おり、Web サービス ファイルの名前はWebService.svcです。

上記のコードは、GetSilverlightPolicy()メソッドを で公開しhttp://localhost:8080/WebService.svc/clientaccesspolicy.xmlます。

WebService.svc必要なのは、サブパスではなく Web サーバーのルートにあるファイルを公開することですが、これを実現する方法が見つかりませんでした。

endpointaddressプロパティを/orに設定してhttp://localhost:8080/も機能しませんでした。

hostサービス ノードにセクションを追加しない:

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8080/"/>
  </baseAddresses>
</host>

誰かが解決策を見つけましたか?

4

1 に答える 1

1

以下に示すように、これを実現できます。

以下に示すように、AspNetCompatiblityMode を true にサポートするように WCF プロジェクトを設定します。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

コード ビハインド (インターフェイスを実装するクラス) を開き、サービス クラスの上に次の属性を追加します。

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

global.asax がある場合は開き (そうでない場合は追加します)、Application_Start メソッドに次の行を追加します。

 RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(RestService)));

これで、svc ファイルを削除できます。上記の手順を実行したら、プロジェクトをビルドして IIS にデプロイします。Web サービスの URL は次のようになります。

http://localhost/VirtualDirectoryName/clientaccesspolicy.xml 
于 2011-11-22T16:30:28.160 に答える