WCF and JSON binding

后端 未结 3 1523
说谎
说谎 2021-01-06 12:32

I am trying to create a wcf service that returns json. I have some problems with my config file and i also don\'t know how to test it.



        
相关标签:
3条回答
  • 2021-01-06 12:43

    You need to add the <webHttp/> to the list of endpoint behaviors. Also, the endpoint needs to use the webHttpBinding. And finally, to respond to GET HTTP requests, you need to use the WebGet attribute (instead of WebInvoke(Method="GET").

      <system.serviceModel> 
        <services> 
          <service name="ContactLibrary.ContactLibrary"> 
            <endpoint address=""
                      binding="webHttpBinding"
                      behaviorConfiguration="JSONEndpointBehavior" 
                      contract="ContactLibrary.IContact"/>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
            <endpoint address="ws"
                      binding="wsHttpBinding"
                      bindingConfiguration="" 
                      contract="ContactLibrary.IContact" /> 
            <host> 
              <baseAddresses> 
                <add baseAddress="http://localhost/ContactLibrary" /> 
              </baseAddresses> 
            </host> 
          </service> 
        </services> 
        <behaviors> 
          <endpointBehaviors> 
            <behavior name="JSONEndpointBehavior"> 
              <webHttp/> 
            </behavior> 
          </endpointBehaviors> 
          <serviceBehaviors> 
            <behavior> 
              <!-- To avoid disclosing metadata information,  
              set the value below to false and remove the metadata endpoint above before deployment --> 
              <serviceMetadata httpGetEnabled="true"/> 
              <!-- To receive exception details in faults for debugging purposes,  
              set the value below to true.  Set to false before deployment  
              to avoid disclosing exception information --> 
              <serviceDebug includeExceptionDetailInFaults="true"/> 
            </behavior> 
          </serviceBehaviors> 
        </behaviors> 
      </system.serviceModel> 
    

    And the service contract:

    [ServiceContract]  
    public interface IContact  
    {  
        [OperationContract]  
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "contact")]  
        Contact GetContact(int idContact);        
    }  
    
    0 讨论(0)
  • 2021-01-06 12:47

    I think you missed bindings here you have to add webHttpBinding and basichttpbing under the bindings tab in system.serviceModel tag.

        <services>
      <service name="VInfotech.Server.Intranet.IntranetService" behaviorConfiguration="IntranetService.Service1Behavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="VInfotech.Server.Intranet.IIntranet">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
      </service>
      <service name="VInfotech.Server.Intranet.MobileServicesController" behaviorConfiguration="ServBehave">
        <endpoint address="RestService" bindingConfiguration="StreamedRequestWebBinding" binding="webHttpBinding" behaviorConfiguration="restPoxBehavior" contract="VInfotech.Server.Intranet.IMobileServices" />
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="StreamedRequestWebBinding"
        bypassProxyOnLocal="true"
                 useDefaultWebProxy="false"
                 hostNameComparisonMode="WeakWildcard"
                 sendTimeout="10:15:00"
                 openTimeout="10:15:00"
                 receiveTimeout="10:15:00"
                 maxReceivedMessageSize="9223372036854775807"
                 maxBufferPoolSize="9223372036854775807"
                 maxBufferSize="2147483647"
                 transferMode="StreamedRequest" >
          <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
        </binding>
      </webHttpBinding>
      <basicHttpBinding>
        <binding name="Binding1" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/>
        </binding>
        <!-- For Cyber Source bindings-->
        <binding name="ITransactionProcessor" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/>
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>
      <!--Cyber Source bindings ends here-->
    </bindings>
    
    0 讨论(0)
  • 2021-01-06 12:52

    It's not good that you have Service Contract IContact and Data Contact Contact. Rename Service Contract like IContactService.

    <services>
      <service name="ContactLibrary.ContactService">
        <endpoint address="" binding="webHttpBinding" contract="ContactLibrary.IContactService"  behaviorConfiguration="JsonBehavior" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    
    <behaviors>
      <endpointBehaviors>
        <behavior name="JsonBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

    During Debug time (it looks you have WCF library), service address will be http://localhost:8732/contact

    0 讨论(0)
提交回复
热议问题