2

大学のプロジェクトで Rest を使用して独自の Web サービスを作成しようとしています。いくつかのチュートリアルを行った後、独自のサービスを作成することができ、wcf テスト クライアントを使用して Visual Studio でサービスが動作し、結果を返しています。

ただし、サービスを参照すると ( http://localhost:53215/UserService1.svc) サービス ページは表示されますが、http://localhost:53215/UserService1.svc/GetUsersNames送信すると 404、ページが見つかりませんというエラーが表示されます。

誰かが私が間違っていることを見ることができますか?

これが私のコードです。

Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>    
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfRestSample.IUserService1">
        <endpoint address="" contract="WcfRestSample.IUserService1" binding="webHttpBinding" behaviorConfiguration="restBehavior"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <connectionStrings>
      <add name="cs4_databaseEntities" connectionString="metadata=res://*/cs4_model.csdl|res://*/cs4_model.ssdl|res://*/cs4_model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\cs4_database.mdf;integrated security=True;user instance=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

IUserService.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfRestSample
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IUserService1" in both code and config file together.
    [ServiceContract]
    public interface IUserService1
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Xml)]
        List<string> GetUsersNames();
    }
}

UserService1.svc

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfRestSample
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "UserService1" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select UserService1.svc or UserService1.svc.cs at the Solution Explorer and start debugging.
    public class UserService1 : IUserService1
    {
        public List<string> GetUsersNames()
        {
            using (cs4_databaseEntities entities = new cs4_databaseEntities())
            {
                return entities.Users.Select(user => user.Name).ToList();
            }
        }
    }
}

私が使用したチュートリアルは、ブラウザで問題なく動作しました。

4

2 に答える 2

4

あなたのエンドポイントは http://localhost:53215/UserService1.svc/rest/GetUsersNamesです。「rest」部分は、構成「address="rest"」から取得されます

編集者:

サービス名は、実装クラスではなくインターフェースに設定されます。次のように変更します。

<service name="WcfRestSample.IUserService1">

<service name="WcfRestSample.UserService1">

これの結果の 1 つは、サービスが wcf テスト クライアントに読み込まれなくなったことです。おそらくこれが混乱の原因です。wcf テスト クライアントを操作する手順を文書化する人もいれば、Web ブラウザーを操作する手順を文書化する人もいますが、簡単に修正できます。インターフェイスを使用するように変更してください。

于 2013-11-12T15:51:03.757 に答える