简体   繁体   中英

Soap error or https related error

I have two asp.net websites(say abc and pqr). First application 'abc' has the webservice ListingData.asmx and second application pqr has a web page that consumes that webservice. 'abc' application runs on https and 'pqr' runs on http. The code for asmx on 'abc site' is:

    public class ListingAuthHeader : SoapHeader
    {
        public string Username;
        public string Password;
    }

    public class ListingAuthHeaderValidation
    {
    /// <summary>
    /// Validates the credentials of the soap header.
    /// </summary>       

    public static bool Validate(ListingAuthHeader soapHeader)
    {
        if (soapHeader == null)
        {
            throw new NullReferenceException("No soap header was specified.");
        }

        if (soapHeader.Username == null)
        {
            throw new NullReferenceException("Username was not supplied for authentication in SoapHeader.");
        }

        if (soapHeader.Password == null)
        {
            throw new NullReferenceException("Password was not supplied for authentication in SoapHeader.");
        }

        if (soapHeader.Username != "a" || soapHeader.Password != "b")
        {
            throw new Exception("Please pass the proper username and password for this service.");
        }

        return true;
        }
    }

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    public class ListingData  : System.Web.Services.WebService {


    public ListingAuthHeader CustomSoapHeader;

    [WebMethod]
    [SoapHeader("CustomSoapHeader")]

    public DataSet GetListingData(string countryId, int maxListings)
    {
    ListingAuthHeaderValidation.Validate(CustomSoapHeader);
    // then get data from database
    } 

To consume this webservice the c# code is :

    ws.ListingData o = new ws.ListingData();
    ws.ListingAuthHeader h = new ws.ListingAuthHeader();
    h.Username = soapHeaderUsername;
    h.Password = soapHeaderPassword;
    o.ListingAuthHeaderValue = h;
    ds = o.GetListingData(countryId, maxListings);

I have added the webservice reference through 'Add Service Reference'

The stack trace shows following error:

"{System.Net.WebException: The request failed with an empty response. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)"

Both sites are hosted on windows server web with IIS 7.

I have been searching the internet from last two days to resolve this error but could not find a solution which can be applied in my situation.

Any advice/suggestions would be appreciated.

You should configure the client to communicate over HTTPS endpoint like binding configurations. So, put the settings in the application config and configure the servicename;

  <system.serviceModel>
    <bindings>
     <basicHttpBinding>
          <binding name="HttpsBindindConfiguration">
            <security mode="Transport" />        
          </binding>
    </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://abc/ListData.asmx" binding="basicHttpBinding" bindingConfiguration="HttpsBindindConfiguration" contract="ListDataClient" name="ListDataClient" />
    </client>
  </system.serviceModel>

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