2011-06-05 73 views
2

使用WCF,可以为webHTTPBinding生成帮助。通过WebGet操作,它的作用就像魅力一样。然而,使用WebInvoke(Method =“POST”)不会给我任何帮助。在页面中,我可以看到这一点:WCF为REST POST调用生成帮助

网址: 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不是。

[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); 
} 
+0

如何请求和响应你的操作和数据的合同是什么样子? – 2011-06-05 10:25:10

+0

我用system.serviceModel和ServiceContract编辑了这个问题。 – 2011-06-05 12:09:51

+0

如果您从'SaveUser'(仅用于测试)中删除'channelId'并使主体样式为'Bare',它会起作用吗? – 2011-06-05 12:25:46

回答