2016-03-31 33 views
6

İstek formunun JSON olduğu ve yanıt biçiminin iyi çalışan bir Android uygulamasında XML olduğu bir süredir bir WCF (.svc) hizmeti kullanıyorum. Birkaç gün önce, DigiCert'den (joker yeteneklerimi kullanarak) WCF hizmetinde SSL için bir sertifika uyguladım. Servis tarayıcıdan erişilebilir ve hata göstermez. Aşağıda aynı Android kod kullanırken, yanıt hep SSL Fabrikası kullanarak denediAndroid'de SSL üzerinden WCF Hizmetini tüketin

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

ve hem de o olmadan Yani şimdi

<?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> 

WebConfig olduğunu. Ben hatayı araştırdı gibi

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

Yanıtlarımdan bazılarını http://stackoverflow.com/questions/32154115/android-volley-self-signed-https-trust-anchor-for-certification-path-not-found/32219177#32219177 veya http: adresinden deneyin. //stackoverflow.com/questions/32051482/how-can-i-set-signalr-in-android-studio-to-ignore-ssl-issues-for-delvelopement/32051885#32051885 veya http://stackoverflow.com/ sorular/32969952/android-to-server-communication-using-ssl-with-yaşam dolu-kale/32980130 # 32980130 Onlar yardımcı olabilir ya da değil – BNK

+0

olup olmadığını görmek için tls versiyonu hedef android platformunda desteklenir mi? – QiMata

+0

Bu yanıtı dene. http://stackoverflow.com/questions/36492885/get-wcf-rest-get-request-in-android –

cevap

0

durum koduyla 415 ile döndü, her nasılsa svc işaretlemesinde aşağıdaki özellik ekleyerek bu nedenle JSON geçerli WCF hizmeti tarafından kabul edilmedi istek hile yaptı

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

İşte

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

sonra

komple çözüm paylaşacak tam XML işaretleme olduğunu