1

TL; DR-持っていますが[WebGet(UriTemplate = "/")]、機能しません


次のようなWCFサービスがあります。

public interface IUserService
{
    // This doesn't work
    [OperationContract]
    [WebGet(UriTemplate = "/")]
    IList<User> GetAllUsers();

    /////////////////////////////////////
    // Everything below this works
    /////////////////////////////////////

    [OperationContract]
    [WebGet(UriTemplate = "/{id}/")]
    User GetUserById(string id);

    [OperationContract]
    [WebInvoke(UriTemplate = "/", Method = "POST")]
    IList<User> AddUser();

    [OperationContract]
    [WebInvoke(UriTemplate = "/{id}/", Method = "PUT")]
    IList<User> UpdateUser(string id, User user);
}

エンドポイントの構成は次のとおりです

<service name="MyCompany.UserService">
    <host>
        <baseAddresses>
            <add baseAddress="http://localhost:80/api/users/" />
        </baseAddresses>
    </host>
    <endpoint address=""
                        behaviorConfiguration="WebHttpBehavior"
                        binding="webHttpBinding"
                        contract="MyCompany.IUserService" />
    <endpoint address="mex"
                        binding="mexHttpBinding"
                        contract="IMetadataExchange" />
    <endpoint address="soap"
        binding="wsHttpBinding"
        contract="MyCompany.IUserService" />
</service>

ご覧のとおり、私はこのサービスからRESTとSOAPの両方を提供しています。この質問はRESTのみを扱います。

http://localhost:80/api/users/ブラウザで( WCFの用語で)移動GET "/"すると、エンドポイントについて説明しているWCFヘルプページが表示されます。これは、SOAPには役立ちますが、RESTにはあまり役立ちません。ただし、他に何かを行うと、期待どおりに機能します。このPOSTURLにアクセスすると、またはGET /123456、通常のJSON応答が返されます(実際にサービスが実行されます)。

WCFが「/」操作を乗っ取っているようです。このWCFの「ヘルプ」動作をオフにして、操作を実行できるようにする方法はありますか?どんな提案でも大歓迎です。

4

1 に答える 1

3

まず、次の設定オプションを使用して、サービスヘルプページを無効にできます。

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

ただし、これにより、ベースアドレスはデフォルトでサービスwsdlを返します。したがって、これを移動するには、次の構成オプションを使用することもできます。

<serviceBehaviors>
  <serviceMetadata httpGetEnabled="true" httpGetUrl="wsdl"/>
</serviceBehaviors>

これにより、wsdlurlがyour_service_base_address+ "wsdl?wsdl"に移動します。

于 2012-06-13T18:17:08.010 に答える