简体   繁体   中英

getting error message related to basicHttpBinding even though I'm using wsHttpBinding

I am trying to expose a WCF service at a wsHttpBinding endpoint and it gives me the following error message :

Contract requires Session, but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.

Here is the interface :

[ServiceContract(Namespace="http://server.com/orderservices/",SessionMode=SessionMode.Required)]
public interface IOrderService
{
    [OperationContract(IsInitiating=true,IsTerminating=false)]
    string GetOrderNumber();

    [OperationContract(IsInitiating = false, IsTerminating = true)]
    void CreateOrder(string orderXML);
}

Here is my web.config file (the service is hosted in IIS 7 ) :

<system.serviceModel>
   <bindings>
      <wsHttpBinding>
         <binding name="longTimeoutBinding" 
             receiveTimeout="00:10:00" sendTimeout="00:10:00">
         </binding>
      </wsHttpBinding>
   </bindings>
   <services>
      <service name="eMidWare.OrderService">
         <host>
            <baseAddresses>
                <add baseAddress = "http://localhost/" />
            </baseAddresses>
         </host>
         <!-- Service Endpoints -->
         <endpoint 
            address="" 
            binding="wsHttpBinding" bindingConfiguration="longTimeoutBinding"
            contract="eMidWare.IPricingDataService">
         </endpoint>
         <endpoint 
             address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
   </services>
   <behaviors>
      <serviceBehaviors>
         <behavior>
            <serviceDebug includeExceptionDetailInFaults="True" />
         </behavior>
      </serviceBehaviors>
   </behaviors>
</system.serviceModel>

Hmmm.... check your service contract - it's a IOrderService

[ServiceContract(Namespace="http://server.com/orderservices/",SessionMode=SessionMode.Required)]
public interface IOrderService
{
}

but in your config, you're setting up an endpoint for eMidWare.IPricingDataService

<endpoint 
    address="" 
    binding="wsHttpBinding" bindingConfiguration="longTimeoutBinding"
    contract="eMidWare.IPricingDataService">

Therefore, I believe, .NET / WCF 4 will kick in a default endpoint, which is of basicHttpBinding for the http:// scheme by default....

If you had posted your service interface I could have said with certainty but I believe you have something like this on your service interface:

 [ServiceContract(SessionMode = SessionMode.Required)]

This would require session and BasicHttpBinding does not support it. You need to use wsHttpBinding if you need to have sessions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM