2011-06-05 98 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

回答