idksoiputthis
idksoiputthis

Reputation: 121

HTTP 400 Bad Request on method GET request for WCFService

I am using fiddler to test my web service. It connects to a SQL server database (that is connected and running) The get works on local host and through IIS Express in VS 2017. On IIS, the server works except for the GET request through fiddler. Please let me know if you need to see my Service1.svc file (To much code not enough text error) I have tried all other answers

Fiddler Example

Fiddler Example

web.config

<appSettings>
  <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
  <compilation debug="true" targetFramework="4.6.1" />
  <httpRuntime targetFramework="4.6.1"/>
</system.web>
<system.serviceModel>

      <!--<behavior>
         To avoid disclosing metadata information, set the values below to false before deployment
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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="false"/>
      </behavior> -->
  <bindings>
    <webHttpBinding>
      <binding name="restLargeBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" transferMode="Streamed">
        <readerQuotas maxStringContentLength="2147483647"/>
      </binding>
    </webHttpBinding>
  </bindings>
  <behaviors>
    <endpointBehaviors>
      <behavior name="myWebEndPointBehaviour">
        <webHttp automaticFormatSelectionEnabled="true" defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json" helpEnabled="true"/>
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </endpointBehaviors> 

    <serviceBehaviors>
      <behavior name="myServiceBehaviour">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <services>
    <service name="TestWcfService.Service1" behaviorConfiguration="myServiceBehaviour">
      <endpoint address="" contract="TestWcfService.IService1" binding="webHttpBinding" bindingConfiguration="restLargeBinding" behaviorConfiguration="myWebEndPointBehaviour"></endpoint>
      <endpoint address="mex" contract="TestWcfService.IService1" binding="mexHttpBinding" />
    </service>
  </services>

  <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
  </protocolMapping>    
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  <!--
      To browse web app root directory during debugging, set the value below to true.
      Set to false before deployment to avoid disclosing web app folder information.
    -->
  <directoryBrowse enabled="true"/>
</system.webServer>

IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestWcfService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {

        // TODO: Add your service opperations here

        // Get Method
        [OperationContract]
        [WebGet(UriTemplate = "GetUserName")]
        List<UserName> GetUserName();

        // Post Method
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "AddUser", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        int AddUser(string user);

    }

    [DataContract]
    public class UserName
    {
        string user;

        [DataMember]
        public string User
        {
            get { return user; }
            set { user = value; }
        }
    }
}

Upvotes: 0

Views: 402

Answers (1)

idksoiputthis
idksoiputthis

Reputation: 121

I needed to find the proper exception message. There are a couple different ways to do it, but the easiest in this case was to use fiddler (because the error was caused while using it). All I needed to do was paste the Uri I was using for the GET request and paste it in the browser. This gave me the exception and the trace details. I then used the exception message Login failed for user 'IIS APPPOOL\WCFService to search for an answer. The accepted answer on this question Login failed for user 'IIS APPPOOL\ASP.NET v4.0' is the solution (the login may or not slightly differ depending on exact error code and service that you are using)

Hope this helps someone else out there.

Upvotes: 1

Related Questions