0

WCF Restful サービスを作成しようとしています。

これが私の契約です: (ActivateUser クラスは BaseResult クラスを拡張します)。

namespace SmartShopServerContract {
[ServiceContract]
public interface IService {
    [OperationContract]
    [WebGet(RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json, UriTemplate="au/{eMail}/{password}/{idHandy}")]
    ActivateUserResult ActivateUser(string eMail, string password, string idHandy);
}

// Basisklasse der Resultate --> alle Resultate haben einen definierten Status!
[DataContract]
public abstract class BaseResult {

    private string status;

    public BaseResult(string status) {
        this.status = status;   
    }

    [DataMember]
    public string Status {
        get { return this.status; } 
    }
}

// Result für ActivateUser
[DataContract]
public class ActivateUserResult : BaseResult {
    public ActivateUserResult(string status)
        : base(status) {
    }

    [DataMember]
    public string CryptedPassword { get; set; }
}

}

サービスの実装は次のとおりです。

namespace SmartShopServerService {
public class ServiceSmartShop : IService {

    public ActivateUserResult ActivateUser(string eMail, string password, string idHandy) {
        return new ActivateUserResult("OK") {
            CryptedPassword="testatsa"
        };
    }

そして、Web.config ファイルがあります。

    <?xml version="1.0"?>
<configuration>
  <system.serviceModel>
     <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json">
        </standardEndpoint>
      </webHttpEndpoint>
    </standardEndpoints>
    <services>
      <service name="SmartShopServerService.ServiceSmartShop" behaviorConfiguration="RESTBehavior">
        <endpoint address="/" binding="webHttpBinding" contract="SmartShopServerContract.IService" behaviorConfiguration="SmartShopBehavior"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RESTBehavior">
          <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="SmartShopBehavior">
          <webHttp automaticFormatSelectionEnabled="false"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.5" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
  </system.webServer>
</configuration>

次のような「VS2012ネイティブツールコマンドプロンプト」でこれをテストしています:

svcutil.exe http://localhost:51162/SmartShopService.svc/au/data1/data2/data3

コードは実行されていますが、まだメソッドが許可されていません (405) 例外が発生しています。

それについて何か考えはありますか?

--> 現在ローカルで使用

--> IIS Express (Visual Studio 2012)

4

2 に答える 2

3

svcutil を使用して、「RESTful WCF サービス」のプロキシを作成しています。これは機能しません。簡単な理由は、Web エンドポイントが、svcutil ツールが送信する必要のある要求を知るためのメタデータを公開していないことです。長いバージョンは、リンクされたブログ投稿にあります。

于 2013-05-06T15:41:15.627 に答える
0

問題は、ActivateUser クラスの基本クラス (BaseResult) でした --> BaseResult

DataContract クラスを拡張して、それが機能することを期待することはできないようです。

現在、基本クラスの代わりにインターフェイスを使用しています

public interface IResult {
    string Status{get;set;}
}


[DataContract]
public class ActivateUserResult : IResult {

    [DataMember]
    public string CryptedPassword { get; set; }

    [DataMember]
    public string Status { get; set; }
}

これは機能しています....それが私が知っているすべてです;)

于 2013-05-06T21:31:49.903 に答える