2016-03-31 14 views
6

Ich habe eine WCF (.svc) Service für eine Weile, für die Anfrage Format ist JSON und Antwortformat ist XML in einer Android-Anwendung, die gut funktioniert. Vor ein paar Tagen habe ich ein Zertifikat für SSL Zweck auf dem WCF-Dienst von DigiCert implementiert (meine Wildcard-Funktionen verwendend). Der Dienst ist vom Browser aus zugänglich und zeigt keinen Fehler. Unten ist die WebConfigVerbrauchen WCF-Service über SSL in Android

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="IntermediateWebService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
     <customErrors mode="Off"/> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="IntermediateWebService.WebBehavior"> 
       <serviceMetadata httpsGetEnabled="true" /> 

       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     <behavior> 

      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata 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> 
     </serviceBehaviors> 
     <endpointBehaviors> 
      <behavior name="WebBehavior"> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="secureHttpBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="999999999"> 
        <security mode="Transport"> 
         <transport clientCredentialType="None"/> 
        </security> 
       </binding> 
      </basicHttpBinding> 
      <webHttpBinding> 
       <binding name="webHttpBindingConfig"> 
        <readerQuotas maxStringContentLength="2048000" /> 
       </binding> 
      </webHttpBinding> 
     </bindings> 
     <services> 

      <service behaviorConfiguration="IntermediateWebService.WebBehavior" name="IntermediateWebService.Service1"> 
       <host> 
        <baseAddresses> 
         <add baseAddress="https://myurl:4445/"/> 
        </baseAddresses> 
       </host> 
       <endpoint address="" binding="basicHttpBinding" contract="IntermediateWebService.IService1" behaviorConfiguration="WebBehavior" bindingConfiguration="secureHttpBinding" /> 
      </service> 
      <!--<service name="IntermediateWebService.Service1"> 
       <endpoint address="" 
     binding="basicHttpBinding" 
     bindingConfiguration="secureHttpBinding" 
     contract="IntermediateWebService.IService1"/> 



      </service>--> 
     </services> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="false" /> 
    </system.serviceModel> 
<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

jetzt Während also die gleiche Android-Code, die Antwort immer

The server cannot service the request because the media type is unsupported. 

ist habe ich versucht, SSL-Fabrik mit und ohne es auch.

HttpClient client = getHttpsClient(new DefaultHttpClient()); //new DefaultHttpClient(); 

      HttpPost get = null; 
      commandType = params[0].toString(); 
      if ("Login".equals(params[0])){ 

       JSONStringer img = new JSONStringer() 
         .object() 
         .key("value") 
          .object() 
           .key("username").value(params[1].toString()) 
           .key("pwd").value(params[2].toString()) 
           .key("channelID").value(params[3].toString()) 
          .endObject() 
         .endObject(); 
         StringEntity se = new StringEntity(img.toString()); 

       get = new HttpPost("https://" + serverIP + ":" + serverPort + "/Service1.svc/auth"); 
       //get.setHeader("User-Agent", "com.app.new"); 
       get.setHeader("Accept", "application/json"); 
       get.setHeader("Content-Type", "application/json"); 
       get.setEntity(se); 
+1

einige meiner Antworten auf http://stackoverflow.com/questions/32154115/android-volley-self-signed-https-trust-anchor-for-certification-path-not-found/32219177#32219177 oder http Versuchen: //stackoverflow.com/questions/32051482/how-can-i-set-signalr-in-android-studio-to-ignore-ssl-issues-for-delvelopement/32051885#32051885 oder http://stackoverflow.com/ Fragen/32969952/android-zu-Server-Kommunikation-using-ssl-mit-federnd-Burg/32980130 # 32980130 zu sehen, ob sie oder nicht – BNK

+0

Sind die tls Version auf dem Ziel android-Plattform unterstützt helfen können? – QiMata

+0

Versuchen Sie diese Antwort. http://stackoverflow.com/questions/36492885/get-wcf-rest-get-request-in-android –

Antwort

0

Als ich den Fehler entdeckt mit dem Statuscode zurückgegeben 415, wobei die Anforderung irgendwie nicht vom WCF Dienst als gültig JSON daher, indem folgende Attribut in svc Markup hat den Trick

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 
angenommen wurde

Dies ist die komplette XML-Markup

<%@ ServiceHost Language="C#" Debug="true" Service="IntermediateWebService.Service1" CodeBehind="Service1.svc.cs" 
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

wird Komplettlösung teilen später