WCF Создать справку для вызова REST POST - PullRequest
2 голосов
/ 05 июня 2011

Используя WCF, можно создать справку для привязки webHTTP.С операцией WebGet это работает как шарм.Использование WebInvoke (Method = "POST"), однако, не помогает мне.На страницах я вижу это:

URL: http://localhost/edumatic3/trunk/services/service.svc/rest/saveUser

HTTP-метод: POST

Направление сообщения Формат Тело

Запрос неизвестенНе удалось сгенерировать документ схемы.

Ответ неизвестен Не удалось сгенерировать документ схемы.

Есть идеи?

Web.Config system.serviceModel

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="basicHttpBindingConfiguration">
        <security mode="TransportWithMessageCredential" />
      </binding>
    </basicHttpBinding>
  </bindings>
  <behaviors>
    <endpointBehaviors>
      <behavior name="HelpEndPointBehavior">
        <webHttp helpEnabled="true" automaticFormatSelectionEnabled="false" />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
        <serviceCredentials>
          <userNameAuthentication userNamePasswordValidationMode="Custom"
           customUserNamePasswordValidatorType=      
           "Edu3.Service.OpenApi.Security.CustomUserNameValidator
           , Edu3.Service.OpenApi" />
        </serviceCredentials>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service name="OpenApiService" 
             behaviorConfiguration="ServiceBehavior">
    <endpoint name="soap" 
              address="soap" 
              binding="basicHttpBinding" 
              contract="Edu3.Service.OpenApi.Interface.IService" 
              bindingConfiguration="basicHttpBindingConfiguration"/>
    <endpoint name="rest" 
              address="rest" 
              behaviorConfiguration="HelpEndPointBehavior"      
              binding="webHttpBinding" 
              contract="Edu3.Service.OpenApi.Interface.IService"/>
    <endpoint name="mex"  
              address="mex" 
              binding="mexHttpBinding" 
              contract="IMetadataExchange" />
  </service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"  
                           multipleSiteBindingsEnabled="true">
  <serviceActivations>
    <add relativeAddress="services/service.svc" 
         service="OpenApiService" 
         factory="Spring.ServiceModel.Activation.ServiceHostFactory"/>
  </serviceActivations>
</serviceHostingEnvironment>

Сервисный контракт: GetNodeByKey дает мне ясную помощь.SaveUser not.

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate = "login?userName={userName}&password={password}")]
    void Login(string userName, string password);


    [OperationContract]
    [WebGet(UriTemplate = "getNodeByKey/{key}?getAllDescendants={getAllDescendants}"
        , ResponseFormat = WebMessageFormat.Json)]
    [ServiceKnownType(typeof(BranchNodeDTO))]
    [ServiceKnownType(typeof(LeafNodeDTO))]
    [ServiceKnownType(typeof(CasusNodeDTO))]
    [ServiceKnownType(typeof(BucketNodeDTO))]
    NodeDTO GetNodeByKey(string key, string getAllDescendants);

    [OperationContract]
    [WebInvoke(UriTemplate = "saveUser", Method = "POST"
        , BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    UserDto SaveUser(UserDto user, int channelId);
}

1 Ответ

2 голосов
/ 08 августа 2011

А как насчет вашего DataContract?Есть ли перечисления с FlagsAttribute?Кажется, что когда вы используете [Flags] WCF не может правильно сгенерировать страницу справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...