1

すべてを実装するサービスクラスは次のとおりです。

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class RESTservice : IRESTservice, IRESTservice2
{
    List<Person> persons = new List<Person>();
    int personCount = 0;

    public Person CreatePerson(Person createPerson)
    {
        createPerson.ID = (++personCount).ToString();
        persons.Add(createPerson);
        return createPerson;
    }

    public List<Person> GetAllPerson()
    {
        return persons.ToList();
    }

    public List<Person> GetAllPerson2()
    {
        return persons.ToList();
    }

    public Person GetAPerson(string id)
    {
        return persons.FirstOrDefault(e => e.ID.Equals(id));
    }

    public Person UpdatePerson(string id, Person updatePerson)
    {
        Person p = persons.FirstOrDefault(e => e.ID.Equals(id));
        p.Name = updatePerson.Name;
        p.Age = updatePerson.Age;
        return p;
    }

    public void DeletePerson(string id)
    {
        persons.RemoveAll(e => e.ID.Equals(id));
    }
}

(両方の契約は正常に機能しています)

これが私のウェブです。構成ファイル:

    <?xml version="1.0"?>
    <configuration>

      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>

        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
        </serviceHostingEnvironment>
        <services>
          <service name="RESTservice">
            <endpoint address="RestService" binding="webHttpBinding" contract="test.IRESTservice" />
            <endpoint address="RestService2" binding="webHttpBinding" contract="test.IRESTservice2" />
          </service>
        </services>
        <standardEndpoints>
          <webHttpEndpoint>
            <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"></standardEndpoint>
          </webHttpEndpoint>
        </standardEndpoints>
      </system.serviceModel>
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>

    </configuration>

そしてもちろん私のサービス宣言:

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

localhost:port/RestService で http GET を実行すると、次の例外が発生します。

サービス「RESTservice」は複数の ServiceContract タイプを実装しており、構成ファイルにエンドポイントが定義されていません。WebServiceHost は既定のエンドポイントを設定できますが、サービスが単一の ServiceContract のみを実装している場合に限ります。単一の ServiceContract のみを実装するようにサービスを変更するか、構成ファイルで明示的にサービスのエンドポイントを定義してください。

何が問題なのかわかりません。リードはありますか?

4

1 に答える 1

1

IRESTservice と IRESTservice2 の宣言の両方で、ServiceContractAttribute ConfigurationName を構成ファイルと同じ名前に設定する必要があります。

[System.ServiceModel.ServiceContractAttribute(ConfigurationName="test.IRESTservice")
public interface IRESTService
{
}

[System.ServiceModel.ServiceContractAttribute(ConfigurationName="test.IRESTservice2")
public interface IRESTService2
{
}
于 2012-08-14T18:01:31.417 に答える